SpringBoot3这些变化一定要记住了

2024年 3月 4日 100.1k 0

环境:SpringBoot.3.0.5

1.Spring MVC 和 WebFlux URL 匹配更改

从 Spring Framework 6.0 开始,尾部斜杠匹配配置选项已被弃用,其默认值设置为false。如下示例:

// 在Spring6之前匹配下面两个路径
// 1. /some/greeting
// 2. /some/greeting/
@GetMapping("/some/greeting")
public String greeting() {
  return "Hello";
}
// 在spring6之后版本中只能匹配/some/greeting这一个路径

你可以通过如下方式支持尾部斜杠

@GetMapping("/some/greeting", "/some/greeting/")

// spring mvc
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
  @Override
  public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.setUseTrailingSlashMatch(true) ;
  }
}
// webflux
@Configuration
public class WebConfiguration implements WebFluxConfigurer {
  @Override
  public void configurePathMatching(PathMatchConfigurer configurer) {
    configurer.setUseTrailingSlashMatch(true) ;
  }
}

2. Http Header大小配置

在Spring6之前版本,server.max-http-header-size在四个支持的嵌入式web服务器上的处理不一致。当使用Jetty、Netty或Undertow时,它会配置最大HTTP请求头大小。当使用Tomcat时,它会配置最大HTTP请求和响应头大小。

为了解决这种不一致,server.max-http-header-size已被弃用,并引入了server.max-http-request-header-size的替代品。这两个属性现在只适用于请求header大小,而与底层的web服务器无关。

# Spring6之前版本
server:
  max-http-header-size: 8KB
# Spring6之后版本  
server:
  max-http-request-header-size: 8KB

要限制Tomcat或Jetty(仅有的两个服务器支持这样的设置)上HTTP响应头的最大大小,请使用WebServerFactoryCustomizer。

public class WebConfig implements WebServerFactoryCustomizer {


  @Override
  public void customize(TomcatServletWebServerFactory factory) {
    // ...
  }
}

Jetty

Jetty还不支持Servlet 6.0。要在Spring Boot 3.0中使用Jetty,必须将Servlet API降级到5.0。您可以使用jakarta-servlet。属性来执行此操作。

3. RestTemplate 中的 Apache HttpClient

Spring6已删除对 Apache HttpClient 的支持,并替换为org.apache.httpcomponents.client5:httpclient5(注意:此依赖项具有不同的 groupId)。如果您注意到 HTTP 客户端行为存在问题,则可能是RestTemplate回退到 JDK 客户端。org.apache.httpcomponents:httpclient可以由其他依赖项传递传递,因此您的应用程序可能依赖此依赖项而不声明它。

4. Actuator Endpoints清理

因为/env和/configprops端点可以包含敏感值,所以默认情况下所有值总是被屏蔽。这曾经只适用于敏感的键。

SpringBoot3之前版本,如下2.7.16 访问/env返回结果:

图片图片

只对敏感信息加密处理。

SpringBoot3中,如下3.2.1 访问/env返回结果:

图片图片

图片图片

所有值都加密处理了。

你可以通过如下配置进行显示

management:
  endpoint:
    env:
      show-values: always
    configprops:
      show-values: always

自定义加密处理功能

@Configuration
public class ActuatorConfig {
  @Bean
  SanitizingFunction sanitizingFunction() {
    return data -> {
      return data.withValue("------") ;
    };
  }
}

图片图片

5. 配置更改

Cassandra属性

Cassandra的配置属性已经从spring.data.cassandra改变为spring.cassandra .

Redis属性

Redis的配置属性已经从spring.redis改变为spring.data.redis。因为redis自动配置要求Spring数据存在于classpath中。

MySQL JDBC驱动

MySQL JDBC驱动程序的坐标已经从mysql:mysql-connector-java更改为com.mysql:mysql-connector-j。如果你使用的是MySQL JDBC驱动,升级到Spring Boot 3.0时要相应地更新它的坐标。

Spring Security 改变

Spring Boot 3.0已升级到Spring Security 6.0。

ReactiveUserDetailsService

在AuthenticationManagerResolver存在时,ReactiveUserDetailsService不再自动配置。如果应用程序依赖于ReactiveUserDetailService,尽管存在AuthenticationManagerResolver,请定义自己的ReactiveUserDetailsService bean来满足其需求。

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论