百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

重磅!Spring Boot 2.6 正式发布,一大波新特性,看完我彻底躺平了

mhr18 2025-01-04 21:45 23 浏览 0 评论

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 的最新版本情况:



可以看到,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 中的 startedrunning 方法已被弃用,取而代之的是接受 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技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,抄袭者一律举报+投诉,并保留追究其法律责任的权利。

相关推荐

甲骨文签署多项大型云协议,其一未来可贡献超300亿美元年收入

IT之家7月1日消息,根据甲骨文Oracle当地时间6月30日向美国证券交易委员会(SEC)递交的FORM8-K文件,该企业在始于2025年6月1日的202...

甲骨文获TEMU巨额合同,后者大部分基础设施将迁移至Oracle云

IT之家6月23日消息,Oracle甲骨文创始人、董事长兼首席技术官LarryEllison(拉里埃里森)在本月早些时候的2025财年第四财季和全财年财报电话会议上表示,Oracle...

Spring Boot 自定义数据源设置,这些坑你踩过吗?

你在使用SpringBoot进行后端开发的过程中,是不是也遇到过这样的问题:项目上线后,数据库连接总是不稳定,偶尔还会出现数据读取缓慢的情况,严重影响了用户体验。经过排查,发现很大一部分原因竟然...

一个开箱即用的代码生成器(一个开箱即用的代码生成器是什么)

今天给大家推荐一个好用的代码生成器,名为renren-generator,该项目附带前端页面,可以很方便的选择我们所需要生成代码的表。首先我们通过git工具克隆下来代码(地址见文末),导入idea。...

低代码建模平台-数据挖掘平台(低代码平台的实现方式)

现在来看一下数据连接。·这里是管理数据连接的空间,点击这里可以新增一个数据连接。·输入连接名称,然后输入url,是通过gdbc的方式去连接的数据库,目前是支持mysql、oracle以及国产数据库达梦...

navicat 17.2.7连接oracle数据库提示加载oracle库失败

系统:macOS15.5navicat版本:navicatpremiumlite17.2.7连接oracle测试报错:加载oracle库失败【解决办法】:放达里面找到程序,显示简介里面勾选“使...

开源“Windows”ReactOS更新:支持全屏应用

IT之家6月17日消息,ReactOS团队昨日(6月16日)在X平台发布系列推文,公布了该系统的最新进展,包括升级Explorer组件,支持全屏应用,从Wine项目引入了...

SSL 推出采用全模拟内置混音技术的模拟调音台Oracle

英国调音台传奇品牌SolidStateLogic宣布推出Oracle——一款采用全模拟内置混音技术的调音台,在紧凑的AWS尺寸机箱内集成了大型调音台的功能。该调音台提供24输入和...

47道网络工程师常见面试题,看看有没有你不会的!

你们好,我的网工朋友。网络工程师面试的时候,都会被问到什么?这个问题其实很泛,一般来说,你肯定要先看明白岗位需求写的是什么。基本上都是围绕公司需要的业务去问的。但不可否认的是,那些最基础的概念,多少也...

汉得信息:发布EBS系统安装启用JWS的高效解决方案

e公司讯,从汉得信息获悉,近日,微软官方宣布InternetExplorer桌面应用程序将于2022年6月15日正式停用。目前大部分客户都是使用IE浏览器打开EBS的Form界面,IE停用后,只能使...

36.9K star ! 推荐一个酷炫低代码开发平台!功能太强!

前言最近在逛github,看看能不能搜罗到一些对自己有帮助的开源软件。不经意间看到一个高star的java开源项目:jeecg-boot。进入在线演示版一看,感叹实在是太牛了!此开源项目不管是给来学习...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

手把手教你在嵌入式设备中使用SQLite3

摘要:数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效。数据库对数据的管理的基本单位是表(table),在嵌入式linux中有时候它也需要用到数据库,听起来好难,其实就是几个函数...

JAVA语言基础(java语言基础知识)

一、计算机的基本概念什么是计算机?计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行、自动高速处理海量数据的现代化智能电子设备。由硬件和软件组成、没有安装过任何软件的计算机称...

再见 Navicat!一款开源的 Web 数据库管理工具!

大家好,我是Java陈序员。在日常的开发工作中,常常需要与各种数据库打交道。而为了提高工作效率,常常会使用一些可视化工具进行操作数据库。今天,给大家介绍一款开源的数据库管理工具,无需下载安装软件,基...

取消回复欢迎 发表评论: