Spring Boot 2.x => 3.x 升级指南


注意:升级前务必全面测试,特别是涉及序列化/反序列化的组件(Jackson/Druid等)。

1. Swagger 替换

新地址

http://localhost:8080/swagger-ui/index.html

依赖调整

移除其他 Swagger 依赖,仅添加:

xml 复制代码
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.5.0</version>
</dependency>

配置修改

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;

@Configuration
public class SwaggerConfig {
    @Bean
    public OpenAPI csimpOpenAPI() {
        return new OpenAPI()
            .info(new Info()
                .title("title")
                .description("接口说明")
                .termsOfService("http://localhost:8080/")
                .version("1.0.0")
                .license(new License()
                    .name("Apache 2.0")
                    .url("http://localhost:8080/")));
    }
}

application.yml 配置(可选)

yaml 复制代码
springdoc:
  swagger-ui:
    path: /swagger-ui.html
  api-docs:
    enabled: true

注解替换对照表

旧注解 新注解 属性说明
@ApiOperation @Operation value → summarynotes → description
@Api @Tag tags → namevalue → description
@ApiModelProperty @Schema value/name → description
@ApiImplicitParams @Parameters 使用 @Parameter + ParameterIn.HEADER
@ApiResponse @ApiResponse 使用 @ApiResponses 包装

示例:

java 复制代码
// 原注解
@ApiOperation(value = "我是value", notes = "我是notes")
@Api(tags = "我是tags")

// 新注解
@Operation(summary = "我是value", description = "我是描述")
@Tag(name = "我是tags", description = "我是描述")

2. Javax → Jakarta 迁移

升级 Java 17 后需替换包名:

diff 复制代码
- javax.annotation.Resource
+ jakarta.annotation.Resource

- javax.validation.Valid
+ jakarta.validation.Valid

- jakarta.servlet.ServletRequest  // 保持 jakarta
+ jakarta.servlet.ServletRequest

// 其他类似替换...

完整替换清单:

  • javax.annotation.*jakarta.annotation.*
  • javax.validation.*jakarta.validation.*
  • javax.servlet.*jakarta.servlet.*

3. RestTemplate 配置变更

Spring Boot 3.x 推荐 WebClient,RestTemplate 需调整:

java 复制代码
import org.apache.hc.client5.http.classic.CloseableHttpClient;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.util.Timeout;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        int connectTimeOut = 5000;
        int readTimeout = 10000;

        RequestConfig requestConfig = RequestConfig.custom()
            .setResponseTimeout(Timeout.ofSeconds(readTimeout))
            .build();
        
        CloseableHttpClient httpClient = HttpClients.custom()
            .setDefaultRequestConfig(requestConfig)
            .build();
        
        HttpComponentsClientHttpRequestFactory factory = 
            new HttpComponentsClientHttpRequestFactory(httpClient);
        factory.setConnectTimeout(connectTimeOut);
        
        return new RestTemplate(factory);
    }
}

4. 依赖版本升级清单

Hibernate Validator

移除手动版本号,使用 Spring Boot 管理版本:

xml 复制代码
<!-- 删除此行 -->
<!-- <hibernate-validator.version>6.1.7.Final</hibernate-validator.version> -->

Logback

移除手动版本号:

xml 复制代码
<!-- 删除此行 -->
<!-- <logback.version>1.2.9</logback.version> -->

Lombok

升级版本:

xml 复制代码
<lombok.version>1.18.32</lombok.version>

MyBatis Plus

升级版本:

xml 复制代码
<mybatis-plus.version>3.5.5</mybatis-plus.version>
<mybatis-plus-generator.version>3.5.5</mybatis-plus-generator.version>
<mybatis.version>3.5.13</mybatis.version>
<mybatis-spring.version>3.0.3</mybatis-spring.version>
<mysql-connector.version>8.0.33</mysql-connector.version>

MapStruct

升级版本:

xml 复制代码
<mapstruct.version>1.5.5.Final</mapstruct.version>

Guava

升级版本:

xml 复制代码
<guava.version>32.1.3-jre</guava.version>

SnakeYAML

指定版本:

xml 复制代码
<snakeyaml.version>2.2</snakeyaml.version>
<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>${snakeyaml.version}</version>
</dependency>

Jackson

显式管理版本:

xml 复制代码
<jackson.version>2.15.4</jackson.version>
<!-- 添加 Jackson 组件 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>
<!-- 其他 Jackson 模块... -->

Druid

升级版本:

xml 复制代码
<druid.version>1.2.20</druid.version>

5. 其他关键变更

Hystrix 替换

xml 复制代码
<!-- 移除 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

<!-- 替换为 Resilience4j -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>

跨域配置更新

java 复制代码
@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                .allowedOriginPatterns("*")  // 替换 allowedOrigins
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .maxAge(3600);
        }
    };
}

循环依赖处理

Spring Boot 3.x 加强循环依赖检测,需重构代码消除循环调用。


一键三连,让我的信心像气球一样膨胀!

相关推荐
苍何9 小时前
30分钟用 Agent 搓出一家跨境网店,疯了
后端
ssshooter9 小时前
Tauri 2 iOS 开发避坑指南:文件保存、Dialog 和 Documents 目录的那些坑
前端·后端·ios
追逐时光者9 小时前
一个基于 .NET Core + Vue3 构建的开源全栈平台 Admin 系统
后端·.net
程序员飞哥9 小时前
90后大龄程序员失业4个月终于上岸了
后端·面试·程序员
zs宝来了10 小时前
Playwright 自动发布 CSDN 的完整实践
java
彭于晏Yan11 小时前
Redisson分布式锁
spring boot·redis·分布式
吴声子夜歌11 小时前
TypeScript——基础类型(三)
java·linux·typescript
GetcharZp11 小时前
Git 命令行太痛苦?这款 75k Star 的神级工具,让你告别“合并冲突”恐惧症!
后端
Victor35612 小时前
MongoDB(69)如何进行增量备份?
后端