2024 05 22 Springboot2.5.9升级到springboot3.2.3
Contents
升级背景
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.yml 或 application.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 主要工作是:
- 升级 Java 版本到 17+
- 迁移包名
javax→jakarta - 更新废弃 API 的使用
虽然工作量不小,但 Spring Boot 3.x 带来了更好的性能、GraalVM 原生编译支持,以及更现代的 API 设计。