Spring Boot 2.3.0发布:优雅停机等新特性一览(上)

简介: Spring Boot 2.3.0发布:优雅停机等新特性一览(上)

关于版本号


Spring Boot代码库的版本好采用“国际通用”(我自己yy的)的命名方式:主版本号.次版本号.修订号,所以通过版本号就能感受到它的变化到底大不大,你升级时是否需要倍加注意等等。那么此处我就对这种命名方式版本号的各段进行科普一波:


  • 主版本号:完全不兼容。产品定位变化、核心API大规模不兼容(比如包名变了)、架构方式升级不能向下兼容…
  • 举例:Configuration1.x -> 2.x;Zuul1.x -> 2.x;Spring Boot1.x -> 2.x;Netty4.x -> 5.x
  • 次版本号:相对兼容。一般是增加新特新,删除掉废弃的API,修改某些API不兼容。总的来说是影响比较小,在可控范围内的,但升级时不可掉以轻心,必须做前期调研
  • 修订号:100%兼容。一般是修复bug、新增无伤大雅的一些特性等,一般想升就升


这次Spring Boot升级到2.3.0版本,属于次版本号的升级,因此会带有些新特性,还是值得一看的。



正文


Spring Boot v2.2依然是活跃的维护的版本,Spring Boot遵循的是Pivotal OSS支持策略,从发布日期起支持主要版本3年。但是呢,一般来说在主要/次要版本发布时,将会对上个主要版本至少提供12个月的支持(即使超过了3年),以解决关键的bug或者安全问题。


关于其它版本的维护活跃状态和已经EOL的日期,做出如下说明:


  • 2.2.x:支持的版本。2019.10发布,是现在的活跃的主干
  • 2.1.x:支持的版本。2018.10发布,会支持到2020.10月底
  • 2.0.x:生命已终止的版本。2018.3发布,2019.4.3停止维护
  • 1.5.x:生命已终止的版本。2017.1发布,是最后一个1.x分支,2019.8.1停止维护


从官网页面也可以看出,只有支持的版本才会被列出来,对使用者是有一定的引导作用的:


image.png



简单回忆2.2版本的新特性


很明显,Spring Boot2.2版本不是本文关心的重点,但为了起到衔接作用,本处把它的核心新特性列一下:


  1. Spring Framework 5.2:重大升级,可以看到它为Cloud Native的努力
  2. JUnit 5:从此版本开始,spring-boot-starter-test默认使用JUnit 5作为单元测试框架
  3. 支持Java13
  4. 性能提升:表现在对所有的自动配置类改为了@Configuration的Lite模式,提升性能。
  5. 新增@ConfigurationPropertiesScan注解,自动扫描@ConfigurationProperties配置类
  6. 支持RSocket


下面我们来了解下本次升级(2.3.0版本)的新特性,分为主要新特性和其它新特性分开阐述。


主要新特性


优雅停机

这个新特性深入人心,是开发者、运维的福音啊。据我了解,很多中小型公司/团队都是使用kill -9(当然有些比较“温柔”的团队也用kill -2)来停服的,这样暴力“停机”很容易造成业务逻辑执行失败,导致在一些业务场景下出现数据不一致现象。虽然我们可以通过一些手段(自研)来避免这个问题,但并不是每个公司/团队都去做了。这不Spring Boot2.3.0版本就内置了这个功能:优雅停机。


小知识:kill -2类似于你的Ctrl + C,会触发shutDownHook事件(从而关闭Spring容器);kill -9就没啥好说的,杀杀杀


SB所有四个嵌入式web服务器(Jetty、Reactor Netty、Tomcat和Undertow)以及响应性和基于servlet的web应用都支持优雅的关闭。在关闭时,web服务器将不再允许新的请求,并将等待完成的请求给个宽限期让它完成。当然这个宽限期是可以设置的:可以使用spring.lifecycle.timeout-per-shutdown-phase=xxx来配置,默认值是30s。


注意,注意,注意:默认情况下,优雅关机并没有开启(还是立即关机),你仅需添加server.shutdown=graceful配置即可开启优雅关机(取值参见2.3.0新增的Shutdown枚举类,默认值参见AbstractConfigurableWebServerFactory.shutdown属性值)。


配置属性的调整


这个版本中,一些配置属性已被重命名或弃用(这会导致不向下兼容,需要特别引起注意),需要你做出调整。


那么如何知道我现在用的哪些属性存在不兼容情况呢???官方给了一个很好的解决方案,这里我用个使用示例教你可以这么处理:


现状:在Spring Boot2.2.x环境中你有很多配置,痛点是不知道哪些配置需要配替换成2.3.x中新的。此时你可以在工程下加入这个jar:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-properties-migrator</artifactId>
    <scope>runtime</scope>
</dependency>


然后升级你的Spring Boot版本号为2.3.0,重新启动工程。本处以你配置文件里的spring.http.encoding.enabled=true为例,由于使用了SB的最新版本,因此可以在控制台看到如下日志输出:


Property source 'applicationConfig: [classpath:/application.properties]':
  Key: spring.http.encoding.enabled
    Line: 3
    Replacement: server.servlet.encoding.enabled


image.png


日志说够明确了吧。有了这个好帮手,妈妈就不用再担心辣么多的配置项需要自己一个个去核对喽,按照指示一个个的修改即可。


官方说明:完成迁移后,请确保从项目的依赖项中删除properties-migrator这个模块。


顺道说一下:升级到2.3.0版本号,属性变化主要是这个:spring.http. -> server.servlet.encoding.、spring.mvc.、spring.codec.

相关文章
|
2月前
|
安全 前端开发 Java
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择。依赖注入使对象管理交由Spring容器处理,实现低耦合高内聚;AOP则分离横切关注点如事务管理,增强代码模块化。Spring还提供MVC、Data、Security等模块满足多样需求,并通过Spring Boot简化配置与部署,加速微服务架构构建。掌握这些核心概念与工具,开发者能更从容应对挑战,打造卓越应用。
36 1
|
11天前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
35 2
|
1月前
|
安全 Java 开发者
强大!Spring Cloud Gateway新特性及高级开发技巧
在微服务架构日益盛行的今天,网关作为微服务架构中的关键组件,承担着路由、安全、监控、限流等多重职责。Spring Cloud Gateway作为新一代的微服务网关,凭借其基于Spring Framework 5、Project Reactor和Spring Boot 2.0的强大技术栈,正逐步成为业界的主流选择。本文将深入探讨Spring Cloud Gateway的新特性及高级开发技巧,助力开发者更好地掌握这一强大的网关工具。
137 6
|
2月前
|
存储 Java 开发者
使用Spring Boot 3.3全新特性CDS,启动速度狂飙100%!
【8月更文挑战第30天】在快速迭代的软件开发周期中,应用的启动速度是开发者不可忽视的一个重要指标。它不仅影响着开发效率,还直接关系到用户体验。随着Spring Boot 3.3的发布,其中引入的Class Data Sharing(CDS)技术为应用的启动速度带来了革命性的提升。本文将围绕这一全新特性,深入探讨其原理、使用方法以及带来的实际效益,为开发者们带来一场技术盛宴。
86 2
|
2月前
|
XML Java 应用服务中间件
深入探索Spring Boot框架的核心特性
Spring Boot 是一款基于Spring框架的开源框架,旨在简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式(默认配置)来简化整个构建过程。
46 11
|
3月前
|
Java 应用服务中间件 开发者
Spring Boot 2.x新特性有哪些?
【7月更文挑战第16天】Spring Boot 2.x新特性有哪些?
49 1
|
4月前
|
前端开发 安全 Java
Spring EL表达式:概念、特性与应用深入解析
Spring EL表达式:概念、特性与应用深入解析
|
4月前
|
运维 Java 关系型数据库
Spring运维之boot项目bean属性的绑定读取与校验
Spring运维之boot项目bean属性的绑定读取与校验
50 2
|
4月前
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
56 2
|
4月前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
328 1