提前一个月Spring Boot 2.6正式发布,一大波新特性来袭

287 阅读4分钟

Spring Boot 2.6.0 提前一个月发布,挺突然的,可以说这是今年年前最重要的一次更新,这边对新特性做了个整理,有兴趣的小伙伴赶紧来尝鲜了解下

提前一个月Spring Boot 2.6正式发布,一大波新特性来袭

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 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.localespring.mvc.locale
spring.web.locale-resolverspring.mvc.locale-resolver
spring.web.resources.*spring.resources.*
management.server.base-pathmanagement.server.servlet.context-path

关于Elasticsearch属性的变更:

提前一个月Spring Boot 2.6正式发布,一大波新特性来袭

提前一个月Spring Boot 2.6正式发布,一大波新特性来袭

因为内容较多,这里就不完全贴出来了,有兴趣的可以看看文末参考资料中的官方信息。

总结

除了上面罗列的更新之外,还有很多小的调整和改进。

小伙伴们可以参考官方发布说明:
github.com/spring-proj…

此外,可以结合 Spring Boot 2.6 的官方文档来学习,地址:
docs.spring.io/spring-boot…

Spring Boot 2.6.0 变动还是蛮多的,大家结合实际工作中都用到了哪些,再考虑是否升级。特别是生产环境,需要慎重。私下抽空,可以结合资料深入学习研究下。

感谢大家的关注和支持