Spring Boot 4教程 / 第 160 节

第16章:废弃 API 与替代方案

本章概述

本章列出 Spring Boot 4 中废弃和移除的 API,并提供替代方案。

本章重点:

  • ✅ 已移除的功能清单
  • ✅ 废弃的配置属性
  • ✅ 依赖版本变更
  • ✅ 替代方案详解

16.1 已移除的功能

16.1.1 Web 相关

已移除 API替代方案说明
RestTemplateHTTP Interface / WebClient已废弃,建议迁移
WebSecurityConfigurerAdapterSecurityFilterChain已在 Boot 3 中移除

迁移示例:

旧代码 (RestTemplate):

@Service
public class UserService {
    private final RestTemplate restTemplate;
    
    public User getUser(Long id) {
        return restTemplate.getForObject(
            "http://user-service/users/" + id,
            User.class
        );
    }
}

新代码 (HTTP Interface):

public interface UserClient {
    @GetExchange("/users/{id}")
    User getUser(@PathVariable Long id);
}

@Service
public class UserService {
    private final UserClient userClient;
    
    public User getUser(Long id) {
        return userClient.getUser(id);
    }
}

16.1.2 Security 相关

旧代码:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/public/**").permitAll()
            .anyRequest().authenticated();
    }
}

新代码:

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(auth -> auth
            .requestMatchers("/public/**").permitAll()
            .anyRequest().authenticated()
        );
        return http.build();
    }
}

16.1.3 方法安全

旧注解新注解说明
@EnableGlobalMethodSecurity@EnableMethodSecurity新注解更简洁

迁移:

// 旧代码
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig {}

// 新代码
@EnableMethodSecurity
public class MethodSecurityConfig {}

16.2 废弃的配置属性

16.2.1 配置属性对照表

旧属性 (Boot 3)新属性 (Boot 4)说明
spring.datasource.initialization-modespring.sql.init.mode数据库初始化
spring.jpa.hibernate.use-new-id-generator-mappings已移除默认行为
spring.mvc.throw-exception-if-no-handler-foundspring.mvc.problemdetails.enabled错误处理

迁移示例:

旧配置:

spring:
  datasource:
    initialization-mode: always
  jpa:
    hibernate:
      use-new-id-generator-mappings: true
  mvc:
    throw-exception-if-no-handler-found: true

新配置:

spring:
  sql:
    init:
      mode: always
  mvc:
    problemdetails:
      enabled: true
  threads:
    virtual:
      enabled: true  # 新增

16.3 依赖版本变更

16.3.1 主要依赖升级

依赖Boot 3 版本Boot 4 版本重大变更
Spring Framework6.1.x7.0.x虚拟线程支持
Hibernate6.1.x6.4.x性能改进
Tomcat10.1.x11.0.xJakarta EE 10
Jackson2.15.x2.16.xRecord 支持改进

16.3.2 处理依赖冲突

排除旧版本:

<dependency>
    <groupId>com.example</groupId>
    <artifactId>some-library</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

16.4 Data 访问变更

16.4.1 Repository 方法

新增方法:

// 使用 Limit
List<User> findByStatus(UserStatus status, Limit limit);

// 滚动查询
Window<User> findByStatus(UserStatus status, ScrollPosition position, Limit limit);

废弃方法: 无,保持向后兼容

16.5 完整迁移清单

16.5.1 代码迁移

  • 替换 RestTemplate 为 HTTP Interface
  • 更新 Security 配置为 Lambda DSL
  • 替换 @EnableGlobalMethodSecurity
  • 更新数据访问代码使用新 API

16.5.2 配置迁移

  • 更新 application.yml 配置属性
  • 启用虚拟线程
  • 配置 Problem Details
  • 更新数据库初始化配置

16.5.3 依赖迁移

  • 升级 Spring Boot 版本到 4.0
  • 升级 JDK 到 21
  • 检查第三方库兼容性
  • 解决依赖冲突

16.6 小结

已移除功能

  • RestTemplate(使用 HTTP Interface)
  • WebSecurityConfigurerAdapter(使用 SecurityFilterChain)

配置属性变更

  • 数据库初始化配置
  • 错误处理配置

依赖升级

  • Spring Framework 7.0
  • Hibernate 6.4
  • Tomcat 11.0

导航: