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...