Spring Boot 2.6.0 提前一个月发布,挺突然的,可以说这是今年年前最重要的一次更新,这边对新特性做了个整理,有兴趣的小伙伴赶紧来尝鲜了解下
Spring Boot 2.6.0 新特性
详细的 Spring Boot 2.6 改动信息,小伙伴们可以在这里找到:
github.com/spring-proj… 。你可以结合 Spring Boot 2.6 的官方文档来学习,地址:docs.spring.io/spring-boot…
1、默认情况下禁止循环引用
如果两个类互相引用对方,那就会发生循环依赖问题。
@Service
public class OrderService {
@Autowired
private UserService userService;
}
@Service
public class UserService {
@Autowired
private OrderService orderService;
}
在 Spring Boot 2.6 版本中,循环引用默认情况下已经被禁止了。如果你的项目存在循环引用问题,那你在启动项目的时候就会报错
其实,Spring官方这样做,也是为了鼓励大家养成不要有循环依赖的好习惯。如果你想关闭禁止循环引用的话,可以直接修改配置
spring:
main:
allow-circular-references: true
2、Servlet应用支持在 Cookie 中配置 SameSite 属性
该属性可通过**
server.session.cookie.same-site**属性来配置,共有三个可选值:
- Strict (严格模式),必须同站请求才能发送 cookie
- Lax (宽松模式),安全的跨站请求可以发送 cookie
- None (禁止 SameSite 限制),必须配合 Secure 一起使用
SameSite 是浏览器针对 Cookie 新增的属性,主要用来限制第三方 Cookie,以防止 CSRF 攻击。
3、响应式应用服务器会话属性
响应式应用服务器支持的会话属性,以前是在 spring.webflux.session 下,现在在 server.reactive.session 下,并且提供与 servlet 版本相同的属性。
如,当前版本可以动态配置 reactive session 的有效期
server.reactive.session.timeout=30
4、支持/env端点和configprops配置属性的自定义脱敏
虽然 Spring Boot 之前已经可以处理 /env 和 /configprops 端点中存在的敏感值,只需要可以通过配置属性来控制即可。但还有一种情况,用户可能希望根据属性源自哪个 PropertySource 来应用清理。
例如,Spring Cloud Vault 使用 Vault 来存储加密值并将它们加载到 Spring 环境中。由于所有值都是加密的,因此将整个属性源中的每个键的值脱敏是有意义的。可以通过添加类型为 SanitizingFunction 的 @Bean 来配置此类自定义脱敏规则。
5、增强/info端点,加入Java Runtime信息
增强后的例子,如以下示例 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-plugin 支持自动生成此次构建信息的 build-info.properties
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludeInfoProperties>
<excludeInfoProperty>version</excludeInfoProperty>
</excludeInfoProperties>
</configuration>
</plugin>
7、自动启用 Redis 连接池
你的项目如果依赖了 commons-pool2 的话,Redis(Jedis 和 Lettuce)将会自动启动连接池。
如果你想禁用连接池,也可以配置如下设置:
spring.redis.jedis.pool.enabled = false
或
spring.redis.lettuce.pool.enabled = false
8、WebTestClient 测试
WebTestClient 诞生之初主要是为了测试 Spring WebFlux 项目,这次改版之后,WebTestClient 已经可以支持普通的 Spring MVC 项目
@SpringBootTest
@AutoConfigureWebTestClient
class MyMockWebTestClientTests {
@Autowired
WebTestClient webClient;
@Test
void helloWorldTest() {
webClient
.get().uri("/hello")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("Hello World!");
}
}
9、Docker 镜像构建功能增强
Spring Boot 官方提供了 docker-maven-plugin 插件来帮助我们构建 Docker 镜像。
在 Spring Boot 2.6 版本中,这个插件的功能得到了小幅加强:
- 支持自定义镜像设置额外的 Tags
- 网络配置
- 构建缓存配置
10、依赖升级
Spring Boot 2.6.0 部分依赖升级到新版本:
- Spring HATEOAS 1.4
- pring Data 2021.1
- Spring Security 5.6
- Spring Kafka 2.8
- Spring AMQP 2.4
- Spring Session 2021.1
11、移除 2.4 版本中的过期属性
由于2.4版本完成历史使命,因此有大量过期属性被移除,最近要升级的小伙伴一定要关注一下这部分内容,因为你原来的配置会失效!
关于Spring MVC 和 servlet 部分属性:
旧属性(已删除) | 新属性 |
---|---|
spring.web.locale | spring.mvc.locale |
spring.web.locale-resolver | spring.mvc.locale-resolver |
spring.web.resources.* | spring.resources.* |
management.server.base-path | management.server.servlet.context-path |
关于Elasticsearch属性的变更:
因为内容较多,这里就不完全贴出来了,有兴趣的可以看看文末参考资料中的官方信息。
总结
除了上面罗列的更新之外,还有很多小的调整和改进。
小伙伴们可以参考官方发布说明:
github.com/spring-proj…
此外,可以结合 Spring Boot 2.6 的官方文档来学习,地址:
docs.spring.io/spring-boot…
Spring Boot 2.6.0 变动还是蛮多的,大家结合实际工作中都用到了哪些,再考虑是否升级。特别是生产环境,需要慎重。私下抽空,可以结合资料深入学习研究下。
感谢大家的关注和支持