乐趣区

关于java:重磅Spring-Boot-26-正式发布一大波新特性看完我彻底躺平了

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…

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-pro…

Spring Boot 2.6.0 变动真的还挺多的,看看大家都用到了啥,再思考降级,如果只是学习钻研应用,能够轻易升,但如果是生产环境,请慎重考虑了,集体倡议没有必要跟最新版本。。

Spring Boot 当初曾经成为了实事上的脚手架框架了,让学习和开发变得更简略,同时也让我感觉技术更新切实太快了啊,所以咱们也要一直放弃学习,不然也会跟着淘汰。

如果你还没用过 Spring Boot,明天我就送你一份《Spring Boot 学习笔记 》这个很全了,包含底层实现原理及代码实战,十分齐全,助你疾速买通 Spring Boot 的各个环节。

往期 Spring Boot 教程及示例源码整顿:

https://github.com/javastacks…

最初,你们用的哪个 Spring Boot 版本呢?

欢送来投票统计看下!

好了,明天的分享就到这里了,前面栈长会分享更多好玩的 Java 技术和最新的技术资讯,关注公众号 Java 技术栈第一工夫推送,我也将支流 Java 面试题和参考答案都整顿好了,在公众号后盾回复关键字 “ 面试 ” 进行刷题。

最初,感觉我的文章对你用播种的话,动动小手,给个在看、转发,原创不易,栈长须要你的激励。

版权申明: 本文系公众号 “Java 技术栈 ” 原创,原创实属不易,转载、援用本文内容请注明出处,剽窃者一律举报+投诉,并保留追究其法律责任的权力。

近期热文举荐:

1.1,000+ 道 Java 面试题及答案整顿 (2021 最新版)

2. 别在再满屏的 if/ else 了,试试策略模式,真香!!

3. 卧槽!Java 中的 xx ≠ null 是什么新语法?

4.Spring Boot 2.5 重磅公布,光明模式太炸了!

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

退出移动版