spring boot2.2跟2.6的区别

spring boot2.2 pom文件配置

<dependency>
    <!-- Import dependency management from Spring Boot -->
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.2.2.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

spring boot2.6 pom文件配置

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.6.0</version>
  <type>pom</type>
</dependency>

需要注意的是,2.4.x 版本开始版本号不带 .RELEASE 后缀了!

Spring Boot 2.6.0 新特性

1、默认禁止循环引用

我们都知道,如果两个 Bean 互相注入对方就会存在循环引用问题,2.6.0 这个版本已经默认禁止 Bean 之间的循环引用,如果存在循环引用就会启动失败报错。

解决方案:

1)整改业务,清理掉所有存在循环引用的 Bean;

2)设置允许循环引用:

spring:
  main:
    allow-circular-references: true

也可以通过 SpringApplication 和 SpringApplicationBuilder 设置

2、支持 Cookie SameSite 属性

现在可以使用 server.session.cookie.same-site 属性在 servlet 应用程序的会话 cookie 上配置 SameSite 属性,这个适用于自动配置的 Tomcat、Jetty 和 Undertow 应用服务器,自定义的尚不可知。

更多细节可以参考:

https://docs.spring.io/spring...

3、响应式应用服务器会话属性

响应式应用服务器支持的会话属性已在此版本中扩展。

以前是在 spring.webflux.session 下,现在在 server.reactive.session 下,并且提供与 servlet 版本相同的属性。

4、支持自定义脱敏规则

Spring Boot 现在可以清理 /env 和 /configprops 端点中存在的敏感值。

另外,还可以通过添加类型为 SanitizingFunction 的 @Bean 类来配置自定义清理规则。这个感觉挺重要的,不能在端点中显示敏感信息的,后面栈长研究下再分享,关注公众号 Java技术栈,第一时间推送。

5、重要端点变更

环境变量 /env 端点已经默认不开放了,可以通过以下配置开启:

<span style="background-color:#e9ecef"><span style="color:#24292e"><span style="color:#005cc5">management.info.env.enabled</span> = <span style="color:#005cc5">true</span></span></span>

另外,Spring Boot 下的 /info 端点现在可以公开 Java 运行时信息了,如以下示例 java 节点所示:

<span style="background-color:#e9ecef"><span style="color:#24292e">{  <span style="color:#005cc5">"java"</span>: {    <span style="color:#005cc5">"vendor"</span>: <span style="color:#032f62">"BellSoft"</span>,    <span style="color:#005cc5">"version"</span>: <span style="color:#032f62">"17"</span>,    <span style="color:#005cc5">"runtime"</span>: {      <span style="color:#005cc5">"name"</span>: <span style="color:#032f62">"OpenJDK Runtime Environment"</span>,      <span style="color:#005cc5">"version"</span>: <span style="color:#032f62">"17+35-LTS"</span>    },    <span style="color:#005cc5">"jvm"</span>: {      <span style="color:#005cc5">"name"</span>: <span style="color:#032f62">"OpenJDK 64-Bit Server VM"</span>,      <span style="color:#005cc5">"vendor"</span>: <span style="color:#032f62">"BellSoft"</span>,      <span style="color:#005cc5">"version"</span>: <span style="color:#032f62">"17+35-LTS"</span>    }  }}</span></span>

设置方法:

<span style="background-color:#e9ecef"><span style="color:#24292e"><span style="color:#005cc5">management.info.java.enabled</span> = <span style="color:#005cc5">true</span></span></span>

6、构建信息属性排除

现在可以从 Spring Boot Maven 或 Gradle 插件生成的 build-info.properties 文件中排除特定属性。

比如,排除 Maven 的 version 属性:

<span style="background-color:#e9ecef"><span style="color:#24292e"><<span style="color:#22863a">configuration</span>>    <<span style="color:#22863a">excludeInfoProperties</span>>        <<span style="color:#22863a">excludeInfoProperty</span>>version</<span style="color:#22863a">excludeInfoProperty</span>>    </<span style="color:#22863a">excludeInfoProperties</span>></<span style="color:#22863a">configuration</span>></span></span>

7、 Redis 连接池

当 commons-pool2 在类路径下时,Redis(包括:Jedis 和 Lettuce)支持自动开启连接池。

也可以设置禁用连接池:

<span style="background-color:#e9ecef"><span style="color:#24292e">spring<span style="color:#005cc5">.redis</span><span style="color:#005cc5">.jedis</span><span style="color:#005cc5">.pool</span><span style="color:#005cc5">.enabled</span> = false</span></span>

<span style="background-color:#e9ecef"><span style="color:#24292e">spring<span style="color:#005cc5">.redis</span><span style="color:#005cc5">.lettuce</span><span style="color:#005cc5">.pool</span><span style="color:#005cc5">.enabled</span> = false </span></span>

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 版本当中标识为弃用的类、方法和属性已在此版本中彻底删除,这个升级就要注意了,如果用了应该会出现编译错误。

总结

2.6版本除了上面列出的更改之外,在 Docker 镜像、健康检查、指标监控上都有增强、另外还有许多小的调整和改进,这里就不一一介绍了,可以看下官方发布说明:

https://github.com/spring-pro...
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值