Spring Boot常用于Java后端开发,于2022年11月24日正式发布了3.0.0版本,带来了全新的特性、升级了依赖版本乃至Java版本,基于Java 17的Spring Boot版本,以Jakarta EE 9为基准并支持Jakarta EE 10;与此同时也弃用或更改了一些旧版本中的写法,导致了需要修改代码或配置文件。
笔者尝鲜去升级了一下Spring Boot 3.0,本篇文章将会简要归纳总结一下笔者在升级的时候需要进行的操作、遇到的问题和解决方案,希望能对各位读者有所帮助。
升级后版本信息
代码语言:javascript复制Spring Boot 3.0.4
Spring 6.0.6
Spring Security 6.0.2
springData 3.0.3
springkafka 3.0.4
Java 17
gradle 8.0.2
Gradle Wrapper,可以直接修改gradle/wrapper/gradle-wrapper.properties中的distributionUrl
代码语言:javascript复制distributionUrl=https://services.gradle.org/distributions/gradle-8.0.2-bin.zip
迁移到Jakarta EE
从Spring Boot 3.0开始,原有的Java EE被彻底弃用,换用Jakarta EE,也就是说,所有包名为javax.*的引用都需要更换为jakarta.*。如果使用的是IntelliJ IDEA,可以点击重构-迁移软件包和类-Java EE to Jakarta EE来自动完成扫描和迁移。
此时可以尝试构建并启动服务端,如果能成功启动,恭喜Spring Boot 3升级成功。如果无法正常构建或启动,还需要继续阅读问题排查。
自动配置文件变更
Spring Boot 2.7引入了一个新的文件:
代码语言:javascript复制META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
用于注册自动配置,同时保持与 spring.factories 中注册的向后兼容。Spring Boot 3.0发布后,spring.factories已经被移除,只能通过imports文件来注册自动配置。
XML引用变更
由于JDK中已经包含了XML包,删除以下依赖
代码语言:javascript复制implementation group: 'org.ogce', name: 'xpp3', version: "${xpp3Version}"
implementation group: 'xml-apis', name: 'xml-apis', version: "${xmlapisVersion}"
否则会报以下错误
代码语言:javascript复制The package javax.xml.parsers is accessible from more than one module: <unnamed>, java.xml
数据访问相关的变更
spring.data前缀已被保留给Spring Data项目,如果你使用了Spring Data项目的子项目,application.yaml中相关的配置属性就需要响应的变更。例如 spring.redis现在需要修改为spring.data.redis。
数据库访问升级
将mysql:mysql-connector-java
更改为com.mysql:mysql-connector-j
mysqlconnectorj 8.0.32
mybatis 3.5.12
mybatisspring 3.0.1
MyBatis Spring Boot Starter 3.0.1
Micrometer和prometheus 的支持
代码语言:javascript复制micrometercore 1.10.4
prometheus 0.16.0
特殊问题处理
其他特殊的问题需要根据具体情况进行处理