一、升级jdk
jdk8到jdk17,其中的包名进行了修改,由javax改为了jakarta,但是我们不需要自己手动去改,IDEA工具提供了一个很好的功能,在 重构 选项中找到 迁移软件包和类 ,然后选择 Java EE to Jakarta EE 就可以了,是不是很简单,然后设置一下你项目所用的jdk版本为17就OK了
最后记得改一下maven打包所依赖的jdk版本
二、SpringBoot升级
1、修改springboot和springcloud依赖版本
如果项目不是微服务项目,没有用到springcloud,就只用升级springboot即可
springboot 和 springcloud的对应版本
将springboot的版本改为3.2.8,springcloud版本改为2023.0.0
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.2.8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2023.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2、查看官方升级指南
文档:Spring Boot 3.0 Migration Guide · spring-projects/spring-boot Wiki · GitHub
帮大家整理了下注意点:
-
Spring Boot 3.0 需要 Java 17 或更高版本。Java 8 不再受支持
-
Spring Boot 3.0 基于 Spring Framework 6.0,升级指南:Upgrading to Spring Framework 6.x · spring-projects/spring-framework Wiki · GitHub
-
Spring Boot 3.0 使用 Spring Security 6.0,升级指南:Migrating to 6.0 :: Spring Security
将 Spring Security 的过滤器配置为为每种调度类型调用。可以使用以下属性配置类型
spring.security.filter.dispatcher-types
-
Spring Boot 3.0 重新命名/删除了一些配置属性,需要相应地更新
Spring Boot 提供了一个 spring-boot-properties-migrator
模块。一旦将其作为依赖项添加到项目中,它不仅会分析应用程序的环境并在启动时打印诊断报告,还会在运行时为您临时迁移属性
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
-
类型级不再需要 @ConstructingBinding,简单来说就是自动做了字段的映射,可以省略了
-
自动配置文件
2.x老版本使用的都是spring.factories文件,放在资源目录resources/META-INF/下
现在引入了用于注册自动配置的新 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件,同时保持了与 spring.factories
中注册的向后兼容性
-
JMX默认只暴露Health端点
可使用属性 management.endpoint.env.show-values
或 management.endpoint.configprops.show-values
进行配置
-
更改数据属性
spring.data
前缀是为 Spring Data 保留的,该前缀下的任何属性都意味着类路径中需要 Spring Data。Redis 的配置属性已从 spring.redis.
移动到 spring.data.redis.
因为 redis 自动配置要求 Spring Data 存在于类路径中
-
MySQL JDBC 驱动程序的坐标已从
mysql:mysql-connector-java
变为com.mysql:mysql-connector-j
3、踩雷经验
-
redis
在Springboot官网提供的升级指南也提到了使用spring data的包名都改成了 spring.data,
由于我使用的spring-boot-starter-data-redis依赖,需要也需要将配置文件改掉
-
swagger!!!
由于代码侵入性太强了,升级SpringBoot3.0之后有冲突,废弃了Springfox,需要换成Springdoc
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.6.0</version>
</dependency>
对应的注解也需要更换
@Api --------> @Tag
@ApiIgnore -------> @Parameter(hidden = true) or @Operation(hidden = true) or @Hidden
@ApiImplicitParam -------> @Parameter
@ApiImplicitParams -------> @Parameters
@ApiModel -------> @Schema
@ApiModelProperty(hidden = true) -------> @Schema(accessMode = READ_ONLY)
@ApiModelProperty -------> @Schema
@ApiOperation(value = "") -------> @Operation(summary = "")
@ApiParam -------> @Parameter
@ApiResponse(code = 0, message = "") -------> @ApiResponse(responseCode = "0", description = "")
-
sa-token
需要更换支持springboot3的依赖
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot3-starter</artifactId>
<version>1.38.0</version>
</dependency>
-
validation
校验参数的依赖也需要更换,从javax到jakarta
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
- rabbitmq
属性配置废弃:spring.rabbitmq.publisher-confirms=true
需更换:spring.rabbitmq.publisher-confirm-type=correlated
- mybatis plus
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.5</version>
</dependency>
总结:
可以先熟读spring官方提供的升级指南,这样能少走很多弯路,各种三方的依赖一样,比如mybaits-plus 官网也给出了使用springboot需要更换的依赖,如果有不知道该选什么版本的maven依赖,可以在maven仓库中搜索对应的依赖,然后查询pom文件中所用到一些spring相关的依赖版本是否和你所用的版本一致,如下图所示