背景:在原来一个基于 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 | <dependency> |
- Jakarta EE 替代 Java EE:所有
javax
包被替换为jakarta
包:
1 | javax.persistence.* -> jakarta.persistence.* |
更多改动详情,参考官方文档:SpringBoot 3.0 发布说明
项目迁移中发现的问题
自定义 Starter 不兼容
原版本中自定义Starter的方式为:在扫描类上使用@Configuration
注解,并在META-INF/spring.factories
文件中声明该扫描类:
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ |
而在新版中,自定义Starter应采用@AutoConfiguration
注解,
并在 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件中声明扫描类:
1 | {{启动类路径}} |
Mybatis 兼容性问题
原因:Mybatis 旧版本与 SpringBoot 3.0 不兼容,需升级至 Mybatis 3.x 版本或更高。