zoukankan      html  css  js  c++  java
  • 重磅!Spring Boot 2.6 正式发布,一大波新特性,看完我彻底躺平了。。

    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);
    }
    

    现在可以使用 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 面试题和参考答案都整理好了,在公众号后台回复关键字 "面试" 进行刷题。

    最后,觉得我的文章对你用收获的话,动动小手,给个在看、转发,原创不易,栈长需要你的鼓励。

    版权声明: 本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,抄袭者一律举报+投诉,并保留追究其法律责任的权利。

    近期热文推荐:

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

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

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

    4.Spring Boot 2.5 重磅发布,黑暗模式太炸了!

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

    觉得不错,别忘了随手点赞+转发哦!

  • 相关阅读:
    WinForm 应用程序的打包和部署_简单版(图文)
    WinForm 程序的运行框架与启动流程简介(图文)
    WinForm 实现两个容器之间控件的拖动及排列(图文)
    Web Service 基本概念和技术应用
    Visual Basic不可能消失
    俺是怎样做研究生导师的[ZT]
    细 节 决 定 成 败
    阻碍GIS产业发展的三大问题
    世界第一CEO的人格特征和经营想念【转载】
    [转载]关于创办软件公司的几点思考
  • 原文地址:https://www.cnblogs.com/javastack/p/15580504.html
Copyright © 2011-2022 走看看