背景:在原来一个基于 SpringBoot 2.6.x 的项目中,引入了一个第三方库后,发现无法正常加载其自动装配的Bean。经过排查,发现第三方库基于Spring Boot 3.2.4 版本开发,存在依赖注入方式上的差异。为了兼容性,决定将原项目升级至 Spring Boot 3.x。鉴于 Spring Boot 3.0 的重大变化,本文详细记录了迁移过程中遇到的关键改动及解决方案。

SpringBoot 3.0主要改动

以下是SpringBoot 3.0 中最重要的变动:

  • 最低 Java 版本要求:升级至 Java 17。
  • 移除内置配置:例如,MySQL 驱动等配置被移除,官方提供迁移工具协助升级:
1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
  • Jakarta EE 替代 Java EE:所有 javax 包被替换为 jakarta 包:
1
2
3
4
5
javax.persistence.*   -> jakarta.persistence.*
javax.validation.* -> jakarta.validation.*
javax.servlet.* -> jakarta.servlet.*
javax.annotation.* -> jakarta.annotation.*
javax.transaction.* -> jakarta.transaction.*

更多改动详情,参考官方文档:SpringBoot 3.0 发布说明

项目迁移中发现的问题

自定义 Starter 不兼容

原版本中自定义Starter的方式为:在扫描类上使用@Configuration注解,并在META-INF/spring.factories文件中声明该扫描类:

1
2
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
{{启动类路径}}

而在新版中,自定义Starter应采用@AutoConfiguration注解,
并在 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中声明扫描类:

1
{{启动类路径}}

Mybatis 兼容性问题

Secure2 Image

原因:Mybatis 旧版本与 SpringBoot 3.0 不兼容,需升级至 Mybatis 3.x 版本或更高。