使用 Spring Boot 创建 Docker Image(layers 分层的使用)
简介在Spring Boot 2.3以前,我们创建Spring Boot - docker image最通用的办法就是将Spring boot的应用程序打包成一个fat jar,然后写一个Dockerfile,将这个fat jar制作成为一个docker image然后运行。 在Spring Boot 2.3发布后,附带了快速创建docker image的功能 传统做法和它的缺点首先创建一个非常简单的Spring Boot程序: 12345678910111213@SpringBootApplication@RestControllerpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @GetMapping("/getInfo") public String getInfo() { re...
Spring Boot DevTools 的使用
参考:https://blog.csdn.net/renpeng301/article/details/124596782 Spring Boot DevTools 2.x(IDEA 热部署&远程调试&LiveReload)前言Spring Boot包括一组额外的工具,它们可以使应用程序开发体验更加方便。spring-boot-devtools模块可以包含在任何项目中,以提供额外的开发时特性。要包含devtools支持,请将模块依赖添加到你的项目中,如下面的Maven和Gradle清单所示: Maven 1234567<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </d...
在K8S中实现SpringBoot零宕机发布:滚动更新、优雅停机与弹性伸缩
引言在云原生时代,保证服务的稳定性和高可用性至关重要。本文将深入探讨如何结合 Kubernetes (K8s) 与 Spring Boot,实现零宕机发布。我们将覆盖以下核心主题: 健康检查:确保流量只被路由到健康的实例。 滚动更新:平滑地升级应用,不中断服务。 优雅停机:安全地关闭应用,避免数据丢失或请求失败。 弹性伸缩:根据负载自动调整实例数量。 Prometheus 监控:收集关键指标,洞察应用性能。 配置分离:实现镜像复用,提高交付效率。 参考资料: 微信公众号文章 Stack Overflow: Actuator health endpoint returns OUT_OF_SERVICE Spring Boot Actuator: Kubernetes Probes 1. 健康检查健康检查是实现零宕机发布的基础。K8s 通过就绪探针 (Readiness Probe) 和存活探针 (Liveness Probe) 来判断应用实例是否准备好接收流量或是否需要重启。 就绪探针 (Readiness): 告诉 K8s 应用是否准备好处理请求。如果失败,K8s...
Spring Framework 5 高级进阶指南:从容器、AOP到Web MVC底层原理全解析
引言Spring Framework 是 Java 开发中不可或缺的核心框架。本指南将带你深入 Spring 5 的高级主题,从核心容器的实现机制,到 AOP 的底层原理,再到 Web MVC 的处理流程,为你揭示 Spring 框架内部的精妙设计。无论你是希望巩固基础,还是渴望深入源码,本文都将为你提供一份详尽的学习路线图。 本文将涵盖以下核心内容: 容器与 Bean:深入理解 BeanFactory 与 ApplicationContext,探索 Bean 的完整生命周期。 AOP 原理:剖析 Spring AOP 的三种实现方式(ajc、agent、proxy),并深入 cglib 和 JDK 动态代理。 Web MVC 揭秘:全面解析 Spring MVC 的请求处理流程,包括参数解析、返回值处理、异常处理等核心组件。 Spring Boot 自动配置:探究 Spring Boot 自动配置的魔法,理解其背后的原理和实现。 配套源码地址: https://github.com/behappy-spring-study/spring5_study_source ...
springboot2学习笔记
转自: https://blog.csdn.net/u011863024/article/details/113667634#01SpringBoot2_18 https://blog.csdn.net/u011863024/article/details/113667946 代码地址: https://gitee.com/xiaowu_wang/springboot2 01、基础入门-SpringBoot2课程介绍 Spring Boot 2核心技术 Spring Boot 2响应式编程 学习要求-熟悉Spring基础-熟悉Maven使用 环境要求 Java8及以上 Maven 3.3及以上 学习资料 Spring Boot官网 Spring Boot官方文档 本课程文档地址 视频地址1、视频地址2 源码地址 02、基础入门-Spring生态圈Spring官网 Spring能做什么Spring的能力 Spring的生态覆盖了: web开发 数据访问 安全控制 分布式 消息服务 移动开发 批处理 … Spring5重大升级 响应式编程 内部源码设...
Spring Boot 项目启动时初始化操作的 6 种方式
SpringBoot项目启动时初始化操作的6种方式1、监听容器刷新完成扩展点ApplicationListener<ContextRefreshedEvent>ApplicationContext事件机制是观察者设计模式实现的,通过ApplicationEvent和ApplicationListener这两个接口实现ApplicationContext的事件机制。 Spring中一些内置的事件如下: ContextRefreshedEvent:ApplicationContext 被初始化或刷新时,该事件被发布。这也可以在 ConfigurableApplicationContext接口中使用 refresh() 方法来发生。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用。 ContextStartedEvent:当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的 star...
Spring Native / GraalVM
初识spring native官方介绍 Spring Native提供了使用GraalVM 本机图像编译器将Spring应用程序编译为本机可执行文件的支持。与Java虚拟机相比,本机映像可以为许多类型的工作负载提供更便宜,更可持续的托管。这些包括微服务,功能工作负载,非常适合容器和Kubernetes使用本机映像具有关键优势,例如即时启动,即时峰值性能和减少的内存消耗。GraalVM本机项目希望随着时间的推移会改善一些缺点和折衷方案。构建本机映像是一个繁重的过程,比常规应用程序要慢。预热后,本机映像具有较少的运行时优化。最后,它比具有某些不同行为的JVM还不成熟。常规JVM和此本机映像平台之间的主要区别是: - 在构建时将未使用的零件删除。 - 反射,资源和动态代理需要配置。 - 类路径在构建时是固定的。 - 没有类延迟加载:可执行文件中附带的所有内容都将在启动时加载到内存中。 - 一些代码将在构建时运行。 - 围绕Java应用程序的某些方面存在一些局限性,这些局限性未得到完全支持。 简单来说,就是更快.更短,更小 更快的启动速度 更短的响应时间 更小的内存消耗 十分适用...
探究 Spring 的底层实现原理(二)
接上一篇:探究 Spring 的底层实现原理(一)上一篇从理论到源码讲到了以下四点: BeanFactory Bean的整个生命周期 Bean的属性填充 依赖注入 这节就切合上一篇,手写一个简易版spring的小demo,看看我是怎样去实现的java <谨供参考> 应用程序上下文(启动类) 123ClassPathXmlApplicationContext:xml配置文件方式AH8q3dGK2f2vLZVgbRfLTjQPySe2yRaJHs:注解方式SpringApplication:SpringBoot方式 模拟注解方式启动 配置类,指定"spring"需要扫描的限定包路径 123@ComponentScan("org.xiaowu.xiaowu.spring.xiaowu")public class AppConfig {} 标注@Component的类则是需要被spring管理的 12345@Target({ElementType.TYPE})@Retenti...
探究 Spring 的底层实现原理(一)
探究spring的底层实现原理1<谨供参考> 这篇文章我将尝试从以下几个方面配合源码讲解spring的原理,并在下一个篇章手写一个简易版spring的小demo来更透彻的分析spring项目是如何"动"起来的 BeanFactory Bean的整个生命周期 Bean的属性填充 依赖注入 先来看一张图(看不清可以右键打开) 这里需要说的一点是,spring的核心就是AbstractApplicationContext.refresh中的13个方法,关于refresh我会单独写BeanFactory12345678910以springboot项目为例,运行主入口类的SpringApplication.run会走到AbstractApplicationContext.refresh方法,从ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory()到registerListeners()都是在准备并创建BeanFactory的过程,而这个BeanFacto...
记一次因在 Spring 中动态注入自定义 Bean 报出的异常
在dubbo系列中我写了一篇探究Dubbo服务注册发现的原理,为了在spring中动态注入payservice接口,我利用了BeanDefinitionRegistryPostProcessor接口,中间利用factorybean来实现了一个自定义bean的创建过程. 但是待我运行之后报了这样的错误Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameter, 不得以跟着refresh方法debug,一点点端详,查出了猫腻... 下面是整个代码链路跟踪图,看看这个PayService自定义接口是怎么一步一步注入到spring中的 refresh : 这就不说了,spring的核心方法都在这里 finishBeanFactoryInitialization : 完成此上下文的bean工厂的初始化,初始化所有剩余的单例bean preInstantiateSingletons : 确保所有非延迟初始单例都实例化,同时考虑到Factory...
