SpringBoot开发——Spring Boot3.4发布的新功能速览

发布于:2024-12-07 ⋅ 阅读:(142) ⋅ 点赞:(0)

文章目录

  • 1. RestClient and RestTemplate
  • 2. 配置属性的Bean验证
  • 3. 优雅停机
  • 4. Actuator端点访问控制
  • 5. 结构化日志
  • 6. @Fallback Beans
  • 7. ClientHttpRequestFactory构建器
  • 9. 虚拟线程
  • 10. 杂项

环境:SpringBoot3.4.0

1. RestClient and RestTemplate

新增了自动配置 RestClient 和 RestTemplate 以使用 Reactor Netty 的 HttpClient 或 JDK 的 HttpClient 的支持。按优先级排序,现在支持的客户端是:

  • Apache HTTP Components (HttpComponentsClientHttpRequestFactory)
  • Jetty Client (JettyClientHttpRequestFactory)
  • Reactor Netty HttpClient (ReactorClientHttpRequestFactory)
  • JDK HttpClient (JdkClientHttpRequestFactory)
  • Simple JDK HttpURLConnection (SimpleClientHttpRequestFactory)

注意:如果类路径上没有 HTTP 客户端库,就可能会使用 JdkClientHttpRequestFactory,而之前使用的是 SimpleClientHttpRequestFactory。可以通过设置 spring.http.client.factory 来选择特定的客户端。支持的值包括 http-components、jetty、reactor、jdk 和 simple。

2. 配置属性的Bean验证

以前,当使用 Bean Validation 实现(如 Hibernate Validator)对带有 @Validated 注解的 @ConfigurationProperties 类进行验证时,无论是否使用了 @Valid 注解,嵌套属性的验证都会在其绑定时执行。而在 Spring Boot 3.4 中,验证行为现在遵循 Bean Validation 规范。验证将从 @ConfigurationProperties 注解的类开始,并且仅当对应的字段被 @Valid 注解时,才会向下级联到嵌套属性。

在升级过程中,请检查带有 Bean Validation 约束的 @ConfigurationProperties 类。根据需要,在希望验证级联到嵌套属性的地方添加 @Valid 注解。

3. 优雅停机

现在,默认启用了嵌入式Web服务器(Jetty、Rector Netty、Tomcat 或 Undertow)的优雅关闭功能。如果你需要恢复先前的行为,可以将 server.shutdown 设置为 immediate。

4. Actuator端点访问控制

启用和禁用端点的支持已经被重新设计,取代了原有的开/关支持,采用了一种更细粒度的访问模型。新的模型除了支持禁用端点(无访问权限)和完全启用端点(无限制访问权限)之外,还支持仅允许对端点操作进行只读访问。

以下属性被弃用:

  • management.endpoints.enabled-by-default
  • management.endpoint.<id>.enabled

如下取而代之:

  • management.endpoints.access.default
  • management.endpoint.<id>.access

同样,@Endpoint 上的 enableByDefault 属性已被弃用,取而代之的是一个新的 defaultAccess 属性。

引入了一个新属性,允许操作员控制允许访问执行器端点的级别:

  • management.endpoints.access.max-permitted

此属性会对可能已为端点配置的任何访问权限进行限制。例如,如果将 management.endpoints.access.max-permitted 设置为 read-only,而 management.endpoint.loggers.access 被设置为 unrestricted,那么对 loggers 端点仅允许 read-only 访问。

如下示例,将端点/loggers访问配置为read-only后,在进行修改日志级别后将收到错误信息:

management: