SpringBoot3這些變化一定要記住了
環境: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來滿足其需求。