关键词:
点击关注公众号,Java干货及时送达
Spring Boot 2.6.0 来了
太猛了!Spring Boot 2.5.6 发布不到一个月,Spring Boot 又接连发布了三个版本:
Spring Boot 2.6.0(最新)
Spring Boot 2.5.7
Spring Boot 2.4.13
后面两个版本都是修复 bug 版本,2.6.0 才是硬菜。。
先给大家奉上几个版本的 Maven 依赖:
Spring Boot 2.6.0:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.0</version>
<type>pom</type>
</dependency>
Spring Boot 2.5.7:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.7</version>
<type>pom</type>
</dependency>
Spring Boot 2.4.13:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.13</version>
<type>pom</type>
</dependency>
需要注意的是,2.4.x 版本开始版本号不带 .RELEASE
后缀了!
栈长之前整理了 Spring Boot 的最新版本情况:
版本 | 发布时间 | 停止维护时间 |
---|---|---|
2.7.0 | 2022/05 | - |
2.6.0 | 2021/12/18 | - |
2.5.x | 2021/05/20 | 2023/02/20 |
2.4.x | 2020/12/12 | 2022/08/12 |
2.3.x | 2020/05/15 | 2022/02/15 |
2.2.x | 2019/10 | 已停止维护 |
2.1.x | 2018/10 | 已停止维护 |
2.0.x | 2018/03 | 已停止维护 |
1.5.x | 2017/01 | 已停止维护 |
可以看到,Spring Boot 2.6.0 本计划在今年 12 月发布的,没想到居然提前一个月发布了,还挺突然的。。
废话少说,重点来看下 Spring Boot 2.6.0 都更新了什么鬼?
Spring Boot 2.6.0 新特性
1、默认禁止循环引用
我们都知道,如果两个 Bean 互相注入对方就会存在循环引用问题,如下代码所示:
UserService:
/**
* 作者:栈长
* 来源微信公众号:Java技术栈
*/
@Service
public class UserService
@Autowired
LogService logService;
LogService:
/**
* 作者:栈长
* 来源微信公众号:Java技术栈
*/
@Service
public class LogService
@Autowired
UserService userService;
这两个 Bean 互相引用对方,就是循环引用了。
现在,2.6.0 这个版本已经默认禁止 Bean 之间的循环引用,如果存在循环引用就会启动失败报错:
解决方案:
1)整改业务,清理掉所有存在循环引用的 Bean;
2)设置允许循环引用:
spring:
main:
allow-circular-references: true
也可以通过 SpringApplication 和 SpringApplicationBuilder 设置 ,如:
/**
* 作者:栈长
* 来源微信公众号:Java技术栈
*/
public static void main(String[] args)
SpringApplication application = new SpringApplication(Application.class);
// 允许循环引用
application.setAllowCircularReferences(true);
application.run(args);
2、支持 Cookie SameSite 属性
现在可以使用 server.session.cookie.same-site
属性在 servlet 应用程序的会话 cookie 上配置 SameSite
属性,这个适用于自动配置的 Tomcat、Jetty 和 Undertow 应用服务器,自定义的尚不可知。
server.session.cookie.same-site
支持的三个配置:
SameSite 参考值说明:
None(关闭模式,必须同时设置 Secure)
Lax(宽松模式,允许部分第三方 Cookie,如:Get 表单请求、链接跳转等)
Strict(严格模式,完全禁止第三方 Cookie,URL 一致时才发送 Cookie)
SameSite 扫盲:
SameSite 是浏览器针对 Cookie 新增的属性,主要用来限制第三方 Cookie,以防止 CSRF 攻击。
如 Google 搜索的响应头:
另外,如果你想将 SameSite
属性应用于其他 cookie,可以使用 CookieSameSiteSupplier
接口。
更多细节可以参考:
https://docs.spring.io/spring-boot/docs/2.6.0/reference/html//web.html#web.servlet.embedded-container.customizing.samesite
3、响应式应用服务器会话属性
响应式应用服务器支持的会话属性已在此版本中扩展。
以前是在 spring.webflux.session
下,现在在 server.reactive.session
下,并且提供与 servlet 版本相同的属性。
4、支持自定义脱敏规则
Spring Boot 现在可以清理 /env
和 /configprops
端点中存在的敏感值。
另外,还可以通过添加类型为 SanitizingFunction 的 @Bean 类来配置自定义清理规则。这个感觉挺重要的,不能在端点中显示敏感信息的,后面栈长研究下再分享,关注公众号 Java技术栈,第一时间推送。
5、重要端点变更
环境变量 /env
端点已经默认不开放了,可以通过以下配置开启:
management.info.env.enabled = true
另外,Spring Boot 下的 /info
端点现在可以公开 Java 运行时信息了,如以下示例 java
节点所示:
"java":
"vendor": "BellSoft",
"version": "17",
"runtime":
"name": "OpenJDK Runtime Environment",
"version": "17+35-LTS"
,
"jvm":
"name": "OpenJDK 64-Bit Server VM",
"vendor": "BellSoft",
"version": "17+35-LTS"
设置方法:
management.info.java.enabled = true
6、构建信息属性排除
现在可以从 Spring Boot Maven 或 Gradle 插件生成的 build-info.properties 文件中排除特定属性。
比如,排除 Maven 的 version 属性:
<configuration>
<excludeInfoProperties>
<excludeInfoProperty>version</excludeInfoProperty>
</excludeInfoProperties>
</configuration>
7、 Redis 连接池
当 commons-pool2
在类路径下时,Redis(包括:Jedis 和 Lettuce)支持自动开启连接池。
也可以设置禁用连接池:
spring.redis.jedis.pool.enabled = false
或
spring.redis.lettuce.pool.enabled = false
8、WebTestClient 测试
现在可以使用 WebTestClient 在 Mock 环境中测试 WebFlux 应用,也可以对实时服务器测试任何 Spring Web 应用程序。
这是一个什么样的测试呢?为什么又搞这个测试?这个后面栈长有时间研究下再分享,关注公众号 Java技术栈,第一时间推送。
9、支持 Log4j2 复合配置
现在支持 Log4j2 的复合配置,可以通过 logging.log4j2.config.override
参数来指定覆盖主日志配置文件的其他日志配置文件。
10、依赖升级
官方项目升级到新版本:
Spring Security 5.6
Spring Data 2021.1
Spring HATEOAS 1.4
Spring Kafka 2.8
Spring AMQP 2.4
Spring Session 2021.1.0
第三方依赖升级到新版本:
Apache Kafka 3.0
Artemis 2.19
Cassandra Driver 4.13
Commons DBCP 2.9
Commons Pool 2.11
Couchbase Client 3.2.2
Elasticsearch 7.15
Flyway 8.0.5
Hibernate 5.6
JUnit Jupiter 5.8
Jedis 3.7
Kafka 3.0
Kotlin 1.6
Liquibase 4.5
Micrometer 1.8
Mockito 4.0
MongoDB 4.4
Postgresql 42.3
QueryDSL 5.0
SnakeYAML 1.29
Thymeleaf Layout Dialect 3.0
.....
11、弃用和删除项
1)AbstractDataSourceInitializer 类已被弃用,取而代之的是 DataSourceScriptDatabaseInitializer。另外,AbstractDataSourceInitializer 的子类也已被弃用,取而代之的是新的基于 DataSourceScriptDatabaseInitializer 的类。
2)SpringPhysicalNamingStrategy 类已被弃用,取而代之的是 Hibernate 5.5 的 CamelCaseToUnderscoresNamingStrategy 类。
3)AbstractApplicationContextRunner 类中的三个方法已被弃用,取而代之的是新的基于 RunnerConfiguration 的类。
4)SpringApplicationRunListener 中的 started
和 running
方法已被弃用,取而代之的是接受 Duration 参数的新方法:
参数是有了,方法里面怎么没用到?什么鬼。。这可能是为下个版本彻底移除做伏笔吧!
5)同第 4)点,ApplicationStartedEvent 和 ApplicationReadyEvent 中的构造函数也已被替换为接受 Duration 参数的版本:
6)EnvironmentEndpoint.sanitize 被标识弃用了。
7)Oracle 数据库驱动程序的依赖管理已得到简化,Oracle 驱动包 GroupID com.oracle.ojdbc
需要升级为 com.oracle.database.jdbc
,现在已经删除了对前者的依赖管理。
另外,在 Spring Boot 2.4 版本当中标识为弃用的类、方法和属性已在此版本中彻底删除,这个升级就要注意了,如果用了应该会出现编译错误。
总结
除了上面列出的更改之外,在 Docker 镜像、健康检查、指标监控上都有增强、另外还有许多小的调整和改进,这里就不一一介绍了,可以看下官方发布说明:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6-Release-Notes
Spring Boot 2.6.0 变动真的还挺多的,看看大家都用到了啥,再考虑升级,如果只是学习研究使用,可以随便升,但如果是生产环境,请慎重考虑了,个人建议没有必要跟最新版本。。
Spring Boot 现在已经成为了实事上的脚手架框架了,让学习和开发变得更简单,同时也让我感觉技术更新实在太快了啊,所以我们也要不断保持学习,不然也会跟着淘汰。
如果你还没用过 Spring Boot,今天我就送你一份 《Spring Boot 学习笔记》这个很全了,包括底层实现原理及代码实战,非常齐全,助你快速打通 Spring Boot 的各个环节。
往期 Spring Boot 教程及示例源码整理:
https://github.com/javastacks/javastack
最后,你们用的哪个 Spring Boot 版本呢?
欢迎来投票统计看下!
好了,今天的分享就到这里了,后面栈长会分享更多好玩的 Java 技术和最新的技术资讯,关注公众号Java技术栈第一时间推送,我也将主流 Java 面试题和参考答案都整理好了,在公众号后台回复关键字 "面试" 进行刷题。
最后,觉得我的文章对你用收获的话,动动小手,给个在看、转发,原创不易,栈长需要你的鼓励。
版权声明: 本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,抄袭者一律举报+投诉,并保留追究其法律责任的权利。
关注Java技术栈看更多干货
获取 Spring Boot 实战笔记!
重磅!springboot2.6正式发布,一大波新特性,看完我彻底躺平了。。(代码片段)
点击关注公众号,Java干货及时送达SpringBoot2.6.0来了太猛了!SpringBoot2.5.6发布不到一个月,SpringBoot又接连发布了三个版本:SpringBoot2.6.0(最新)SpringBoot2.5.7SpringBoot2.4.13后面两个版本都是修复bug版本,2.6.... 查看详情
重磅:springboot2.6正式发布,一大波新特性,看完我彻底躺平了。。(代码片段)
SpringBoot2.6.0来了太猛了!SpringBoot2.5.6发布不到一个月,SpringBoot又接连发布了三个版本:SpringBoot2.6.0(最新)SpringBoot2.5.7SpringBoot2.4.13后面两个版本都是修复bug版本,2.6.0才是硬菜。。先给大家奉上几个版本... 查看详情
重磅:springboot2.7正式发布,一大波新特性,看完我彻底躺平了。。(代码片段)
SpringBoot2.7来了大家好,我是栈长。SpringBoot2.6.0发布已经过去大半年了,现在SpringBoot2.7.0如期而至:SpringBoot又接连发布了三个版本:SpringBoot2.7.0(最新)SpringBoot2.6.8SpringBoot2.5.14后面两个版本都是修复bug版本... 查看详情
重磅!springboot2.7正式发布,一大波新特性,看完我彻底躺平了。。(代码片段)
点击关注公众号,Java干货及时送达SpringBoot2.7来了大家好,我是栈长。SpringBoot2.6.0发布已经过去大半年了,现在SpringBoot2.7.0如期而至:SpringBoot又接连发布了三个版本:SpringBoot2.7.0(最新)SpringBoot2.6.8Spri... 查看详情
springboot2.6重磅发布!!!(代码片段)
等了很久,SpringBoot2.6终于在昨天发布啦!我还是今天无聊逛推特的时候看到自己关注的一个Spring项目的一个开发大佬发的动态才知道的。看来多关注一些大佬了解技术最新动向还是很有必要的!SpringBoot2.6重要改动这... 查看详情
tailwindcssv3.0正式发布!一大波新特性来袭!(代码片段)
...年12月10日,TailwindCSS的创始人AdamWathan宣布TailwindCSSv3.0正式发布,带来了一系列性能上的改进、对开发工作流的改善以及大量的新特性。那么这颗在CSS工程化领域极为耀眼的新星在v3.0为我们带来了那些有趣的新特性呢... 查看详情
springcloud2021.0.0正式发布,第一个支持springboot2.6的版本!
...考技术A美国时间12月2日,SpringCloud正式发布了第一个支持SpringBoot2.6的版本,版本号为:2021.0.0,codename为Jubilee。在了解具体更新内容之前,先提个最重要的点:2021.0.0版本对应的SpringBoot是从2.6.1开始的,所以如果在升级的时候不... 查看详情
springboot2.6.1正式发布,2.4.xgameover,2.5.0成最低支持版本。。(代码片段)
上一篇:重磅!SpringBoot2.6正式发布这SpringBoot2.6才发布几天?栈长刚看了下,才隔了一周左右的时间吧,SpringBoot2.6.1又来了:这次我能说我真的跟不上了吗?我只想送它三个字:版本王!这次不... 查看详情
重磅:java14正式发布了
来源:https://www.oschina.net/news/114156/jdk-14-ga此版本包含的JEP(Java/JDKEnhancementProposals,JDK增强提案)比Java12和13加起来的还要多。总共16个新特性如下:305:PatternMatchingforinstanceof(Preview)为instanceof运算符引入模式匹配(预览阶段)通... 查看详情
重磅升级!tdengine3.0正式发布(代码片段)
...研发,我们终于可以骄傲地宣布这一消息。这是一次重磅升级,TDengine3.0是真正的云原生时序数据库(Time-SeriesDatabase,TSDB)。我们先来整体看一下3.0的几大亮点:可以支持10亿个设备采 查看详情
一大波开源项目正在撤离gitee?
...措施,所有新上线的开源仓库需要进行人工审核后可正式公开"。也就是说,所有开源项目,均需要通过Gitee官方审核通过之后 查看详情
springcloud2021.0.0正式发布:第一个支持springboot2.6的版本(代码片段)
....com/美国时间12月2日,SpringCloud正式发布了第一个支持SpringBoot2.6的版本,版本号为:2021.0.0,codename为Jubilee。在了解具体更新内容之前,先提个最重要的点:2021.0.0版本对应的SpringBoot是从2.6.1开始的,所... 查看详情
springcloud2021.0.0正式发布:第一个支持springboot2.6的版本(代码片段)
....com/美国时间12月2日,SpringCloud正式发布了第一个支持SpringBoot2.6的版本,版本号为:2021.0.0,codename为Jubilee。在了解具体更新内容之前,先提个最重要的点:2021.0.0版本对应的SpringBoot是从2.6.1开始的,所... 查看详情
终于!springcloud2021正式发布,一大波更新,看完我彻底躺平了。。(代码片段)
点击关注公众号,Java干货及时送达SpringCloud2021.0.0号外,号外,SpringCloud2021.0.0发布了!距离上一版的《SpringCloud2020.0.4》也有一些日子了,栈长掐指一算,差不多2个多月吧。现在在Maven仓库中已经可用了ÿ... 查看详情
重磅!jdk17发布,oracle宣布从jdk17开始正式免费。。(代码片段)
点击关注公众号,Java干货及时送达上一版:JDK16正式发布,一次性发布17个新特性…不服不行!JDK17正式发布+免费牛逼啊,JDK16刚发布半年(2021/03/16),JDK17又如期而至(2021/09/14),... 查看详情
重磅!《2022中国开源发展蓝皮书》正式发布
作为数字时代的新趋势,开源正以“开放、共享、协同+商业模式”的新型生产方式,以“自由”的传播形式,成为全球信息技术发展的强大推动力。在全世界开源大发展的背景下,近年来中国开源的发展速... 查看详情
终于。。springcloud2021正式发布,一大波更新,看完我彻底躺平了。。.md(代码片段)
SpringCloud2021.0.0号外,号外,SpringCloud2021.0.0发布了!距离上一版的《SpringCloud2020.0.4》也有一些日子了,栈长掐指一算,差不多2个多月吧。现在在Maven仓库中已经可用了:Maven依赖给大家奉上:<dependency... 查看详情
springboot2.6.0正式发布:默认禁止循环依赖增强docker镜像构建...(代码片段)
昨天,Spring官方正式发布了SpringBoot今年最后一个特性版本:2.6.0同时,也宣布了2.4.x版本的终结。那么这个新版本又带来了哪些新特性呢?下面就一起跟着DD来看看吧!重要特性1.Servlet应用支持在Cookie中配置Same... 查看详情