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.

相关文章
|
11月前
|
负载均衡 Java API
Spring Cloud是什么及基本特性都有哪些?
Spring Cloud 是用于构建健壮云应用的框架,包含多个子项目。其核心组件如Eureka(服务注册与发现)、Hystrix(熔断器)、Ribbon(负载均衡)等,帮助开发者快速实现微服务架构。Spring Cloud 提供了服务注册与发现、分布式配置、路由、断路器等功能,简化了微服务开发与管理。本文将重点介绍服务注册与发现及分布式配置两大特性。
632 5
|
6月前
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
195 2
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
236 4
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
206 0
|
安全 前端开发 Java
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择。依赖注入使对象管理交由Spring容器处理,实现低耦合高内聚;AOP则分离横切关注点如事务管理,增强代码模块化。Spring还提供MVC、Data、Security等模块满足多样需求,并通过Spring Boot简化配置与部署,加速微服务架构构建。掌握这些核心概念与工具,开发者能更从容应对挑战,打造卓越应用。
187 1
|
12月前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
2849 17
Spring Boot 两种部署到服务器的方式
|
10月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
424 0
|
12月前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
497 6
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
625 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
854 2

热门文章

最新文章