Spring Boot 3 升级 踩坑笔记

2023-03-16 22:05:39 浏览数 (1)

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

代码语言:javascript复制
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

特殊问题处理

其他特殊的问题需要根据具体情况进行处理

0 人点赞