Contents

2024 05 22 Springboot2.5.9升级到springboot3.2.3

升级背景

Spring Boot 3.x 是一个重大版本升级,基于 Spring Framework 6,要求:

  • Java 17+(最低要求)
  • Jakarta EE 9+(包名从 javax.* 迁移到 jakarta.*
  • 很多废弃的 API 被移除

本文记录从 Spring Boot 2.5.9 升级到 3.2.3 的完整过程。

升级前准备

1. 确认 Java 版本

java -version
# 需要 Java 17 或更高版本

如果使用的是 Java 8 或 11,需要先升级 Java。

2. 备份项目

git add .
git commit -m "升级前备份"
git tag pre-spring-boot-3-upgrade

升级步骤

Step 1: 修改 pom.xml

<!-- 父项目 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.3</version>
    <relativePath/>
</parent>

<!-- Java 版本 -->
<properties>
    <java.version>17</java.version>
</properties>

Step 2: 更新依赖版本

<!-- Spring Cloud(如果使用) -->
<spring-cloud.version>2023.0.0</spring-cloud.version>

<!-- MyBatis(如果使用) -->
<mybatis-spring-boot.version>3.0.3</mybatis-spring-boot.version>

<!-- 其他常用依赖 -->
<druid.version>1.2.21</druid.version>
<pagehelper.version>2.1.0</pagehelper.version>

Step 3: 包名迁移(javax → jakarta)

使用 IDE 的全局替换功能:

javax.servlet     → jakarta.servlet
javax.persistence → jakarta.persistence
javax.validation  → jakarta.validation
javax.annotation  → jakarta.annotation

常见文件

  • @Entity 实体类
  • @Controller 控制器
  • @Repository 数据访问层
  • @Service 服务层
  • @Component 组件

Step 4: 配置文件变更

application.ymlapplication.properties 中的配置可能需要调整:

# 旧配置
spring:
  jpa:
    database-platform: org.hibernate.dialect.MySQLDialect

# 新配置(Hibernate 6)
spring:
  jpa:
    database-platform: org.hibernate.dialect.MySQLDialect

Step 5: 处理废弃 API

// 旧:WebMvcConfigurerAdapter(已移除)
public class WebConfig extends WebMvcConfigurerAdapter {
    // ...
}

// 新:直接实现 WebMvcConfigurer
public class WebConfig implements WebMvcConfigurer {
    // ...
}

常见问题

1. 启动报错:ClassNotFoundException

java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest

解决:检查是否有依赖未迁移,或者有第三方库仍使用 javax 命名空间。

2. Hibernate 启动失败

org.hibernate.HibernateException: Unable to create request session

解决:检查 hibernate-core 版本,Spring Boot 3.x 使用 Hibernate 6。

3. 事务管理器配置

// 旧配置
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
    return new JpaTransactionManager(emf);
}

// 新配置
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
    return new JpaTransactionManager();
}

4. Spring Security 配置

// 旧:WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception {
    // ...
}

// 新:SecurityFilterChain
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    // ...
    return http.build();
}

升级检查清单

  • Java 版本升级到 17+
  • pom.xml 依赖版本更新
  • javax 包名迁移到 jakarta
  • 废弃 API 替换
  • 配置文件检查
  • 第三方依赖兼容性检查
  • 单元测试全部通过
  • 集成测试验证

总结

升级 Spring Boot 3.x 主要工作是:

  1. 升级 Java 版本到 17+
  2. 迁移包名 javaxjakarta
  3. 更新废弃 API 的使用

虽然工作量不小,但 Spring Boot 3.x 带来了更好的性能、GraalVM 原生编译支持,以及更现代的 API 设计。