SpringBoot3这些变化一定要记住了
创始人
2025-07-13 17:00:34
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来满足其需求。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...