Spring Boot 2.4 正式发布,重大调整!!!

简介: Spring Boot 2.4 正式发布,重大调整!!!

大家周末愉快啊,Spring Boot 2.3.5 没发布几天,你看,还是 1 周前发布的:


image.png


昨天又有粉丝留言说 Spring Boot 2.4.0 已经发布了:


image.png


我了个去,栈长赶紧跑到 Spring Boot 官网看了下,果然 2.4.0 了,我顿时傻眼了,又得写文章了,看来我消息还是稍微有点滞后了…


image.png


Spring Boot 2.4.0 这么快就发布了,又是周末来给大家推送,我印象中都是周末推……


Spring Boot 更新也太快了,很多同学表示学不来了,学不动了。学不动也要学啊,不然就要被淘汰了,Java技术栈所有 Spring Boot 教程和示例源码都上传到 Github 了,欢迎 Star:


https://github.com/javastacks/spring-boot-best-practice


好吧,还是例行公事,接下来栈长带大家来解读下 Spring Boot 2.4.0 到底更新了什么鬼?


切记!!!


这个版本不要轻易升级!!!


下面注意仔细看完哦。。。


一、支持 Java 15

Spring Boot 2.4.0 支持 Java 15 了,同时向下兼容 Java 11 和 Java 8。


二、依赖升级

Spring Boot 2.4.0 升级了一些主要的 Spring 项目:


Spring AMQP 2.3

Spring Batch 4.3

Spring Data 2020.0

Spring Framework 5.3

Spring HATEOAS 1.2

Spring Integration 5.4

Spring Kafka 2.6

Spring Retry 1.3

Spring Security 5.4

Spring Session 2020.0

另外,还尽可能升级了一些第三方库到最新稳定版本:


Artemis 2.13

AssertJ 3.18

Cassandra Driver 4.7

Elasticsearch 7.9

Flyway 7

Jersey 2.31

JUnit 5.7

Liquibase 3.10

Lettuce 6.0

Micrometer 1.6

Mockito 3.4

MongoDB 4.1

Oracle Database 19.7

Reactor 2020.0

RSocket 1.1

Undertow 2.2

……

三、配置改进

1、改进配置文件的处理方式

Spring Boot 2.4 改进了处理 application.properties 和 application.yml 配置文件的方式。更新后的逻辑旨在简化和合理化外部配置的加载方式,但有些参数的组合形式却得到了限制,升级请谨慎。


如果你的应用工程只有一个简单的 application.properties 或 application.yml 文件,则可以进行无缝升级到 Spring Boot 2.4.0。


但是,如果你的配置较为复杂,比如说有指定 profile 的参数,或者有基于 profile 激活的参数,要使用新功能就需要进行一些更改。


更多细节可参考:


https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide


如果你想继续使用 Spring Boot 2.3 的配置逻辑,也可以通过在 application.properties 或者 application.yml 配置文件中添加以下参数:


spring.config.use-legacy-processing = true


2、导入配置参数改进

通过配置参数 spring.config.location 和 spring.config.import 来指定或者导入配置文件时,如果配置文件不存在,现在不是只能默默地失败了,可以通过添加 optional: 前缀来标识它是可选的。


比如我们从 /etc/config/application.properties 指定配置文件,如果这个文件不存在,系统就会跳过它。


spring.config.location=optional:/etc/config/application.properties


如果你想将所有指定的配置文件都默认为可选的,可以通过 SpringApplication.setDefaultProperties(…) 来设置


spring.config.on-location-not-found=ignore 这个参数,或者将它设置在系统环境变量中。


3、支持导入配置树

新版本的 spring.config.import 属性还可以用于导入配置树,通过与 Kubernetes 一起使用,配置树是提供键/值对的另一种方法,每一个键值/对都在其自己的文件中声明,文件名是键,文件内容就是值。


另外,从配置树导入的参数默认会带一个换行符。


详细的参考:


https://docs.spring.io/spring-boot/docs/2.4.0/reference/html/spring-boot-features.html#boot-features-external-config-files-configtree


具体的配置上的细节暂时没有时间详细研究了,后面有机会再详细介绍一篇,关注公众号Java技术栈第一时间推送。


四、新增启动端点

Spring Boot 2.4.0 添加了一个新的启动端点,用来显示应用启动有关的详细信息,比如可以帮助我们来诊断启动时间比预期更长的 Spring Beans。


这个功能建立在 Spring Framwork 5.3 最近添加的应用程序启动跟踪特性的基础上,感兴趣的可以在 Spring 框架文档中阅读有关该功能的更多信息。


https://docs.spring.io/spring-framework/docs/5.3.x/reference/html/core.html#context-functionality-startup


五、新增起源链(Origin Chains)

Origin 接口更新了,使用了全新的 getParent() 方法,这样就可以提供完整的参数起源链,以准确显示某一项参数的来源。


比如你在 application.properties 配置文件中使用 spring.config.import 来导入第二个配置文件的参数,从第二个配置文件加载的参数的 Origin 将具有一个指向原始导入声明的父级。


说白了就是可以看到参数从哪里导进来的,可以通过 actuator/env 或者 actuator/configprops 端点来查看与之相关的输出信息,这里暂不详细研究了,后面有机会再详细介绍一篇,关注公众号Java技术栈第一时间推送。


六、Docker 支持升级

1、镜像发布

Spring Boot Maven 插件的 spring-boot:build-image 指令和 Gradle 插件的 bootBuildImage 任务现在可以直接发布 Docker 镜像到 Docker 注册中心了。


2、授权机制

当使用 Spring Boot 构建时,可以为构建器或者运行镜像使用私有授权的 Docker 私有注册中心,支持用户名/密码认证以及基于 Token 机制认证。


更多详细的配置可以参考对应的插件文档:


Maven:


https://docs.spring.io/spring-boot/docs/2.4.0/maven-plugin/reference/htmlsingle/#build-image-example-publish


Gradle:


https://docs.spring.io/spring-boot/docs/2.4.0/gradle-plugin/reference/htmlsingle/#build-image-example-publish


七、移除了 JUnit 5’s Vintage 引擎

Spring Boot 2.4.0 从 spring-boot-starter-test 中移除了 JUnit 5 Vintage 引擎,JUnit 5 可以通过 vintage 引擎来运行 JUnit 4 编写的测试用例,说白了就是兼容 JUnit 4 呗。


如果你不想迁移测试用例到 JUnit 5 而继续使用 JUnit 4,添加以下 Maven 依赖即可:

<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

以下为对应的 Gradle 配置:

testImplementation("org.junit.vintage:junit-vintage-engine") {
    exclude group: "org.hamcrest", module: "hamcrest-core"
}

八、其他更新

Spring Boot 2.4.0 发布更新说明中还包括了许多其他的更新和改进,比如说在 Spring Boot 2.4.0 中标识了在下个版本中计划废弃的不推荐使用的类和方法等。


以上就是 Spring Boot 2.4.0 的主要变更内容,当然还有许多发布细节,感兴趣的可以研究下这个更新说明:


https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.4-Release-Notes


总结

终于写完了,又肝了一个晚上!!


可以看出 Spring Boot 2.4.0 的变更还是蛮大的,特别是在配置文件、配置参数的处理,还有许多框架的重大版本升级。


切记不要轻易升级到这个版本,如需升级,最好是详细看清楚变更内容,做好充分测试,以免年终奖没了。。


关于更多的细节暂时没时间深入研究了,后续栈长有时间再深入研究下,给大家带来更详细的技术文章,关注公众号Java技术栈第一时间推送。


相关文章
|
5月前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
131 0
|
5月前
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
135 0
|
5月前
|
XML Java 数据库连接
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
87 0
|
6天前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
24 2
|
4月前
|
运维 Java 关系型数据库
Spring运维之boot项目bean属性的绑定读取与校验
Spring运维之boot项目bean属性的绑定读取与校验
49 2
|
4月前
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
53 2
|
4月前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
287 1
|
4月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
43 1
|
4月前
springboot2.4.5使用pagehelper分页插件
springboot2.4.5使用pagehelper分页插件
113 0
|
4月前
|
缓存 运维 Java
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
38 0