环境: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<TomcatServletWebServerFactory> {
@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来满足其需求。