Spring Boot2 升级到 Spring Boot3
文章目录
起因
自己跑的一些小项目之前在低成本的阿里云上,为了节省内存是跑在adoptopenjdk/openjdk8-openj9:alpine-slim这个docker下。
基本上每个java的容器堆内存最高不需要超过512m,大部分256m甚至128m都可以跑的起来。
年前趁着国补买了一台SER7放在家里装了PVE当成Home Server,阿里云的机器只用来作为frp穿透出口。所以现在内存已经不再是瓶颈了,就可以把现有项目的jdk升级到jdk21了
修改的内容
pom文件
因为有用到grpc,根据grpc-spring-boot-starter的介绍最高只能用spring-boot 3.2.4 和 spring-cloud 2023.0.0
<spring-boot-dependencies.version>3.2.4</spring-boot-dependencies.version>
<spring-cloud-dependencies.version>2023.0.0</spring-cloud-dependencies.version>
<spring-boot-maven-plugin.version>3.2.4</spring-boot-maven-plugin.version>
<servlet-api.version>6.0.0</servlet-api.version>
<mybatis-plus-boot-starter.version>3.5.10.1</mybatis-plus-boot-starter.version>
<mybatis-plus-join-starter.version>1.5.2</mybatis-plus-join-starter.version>
<dynamic-datasource-starter.version>4.3.1</dynamic-datasource-starter.version>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
+ <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatis-plus-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-jsqlparser-4.9</artifactId>
+ <artifactId>mybatis-plus-jsqlparser</artifactId>
<version>${mybatis-plus-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
- <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+ <artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
<version>${dynamic-datasource-starter.version}</version>
</dependency>
<dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
+ <groupId>jakarta.servlet</groupId>
+ <artifactId>jakarta.servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
java代码
- 替换所有的
import javax.servlet.http.HttpServletRequest;
为import jakarta.servlet.http.HttpServletRequest;
- 替换所有的
import javax.servlet.http.HttpServletResponse;
为import jakarta.servlet.http.HttpServletResponse;
- 替换所有的
import javax.annotation.Resource;
为import jakarta.annotation.Resource;
- 替换所有的
import javax.servlet.FilterChain;
为import jakarta.servlet.FilterChain;
- 替换所有的
import javax.servlet.ServletException;
为import jakarta.servlet.ServletException;
- 替换
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
为import org.springframework.web.servlet.HandlerInterceptor;
同时将extends HandlerInterceptorAdapter {
替换成implements HandlerInterceptor {
- 替换所有的
import javax.annotation.PostConstruct;
为import jakarta.annotation.PostConstruct;
starter修改
META-INF
目录下增加spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
将原来spring.factories
文件中的AutoConfiguration每行一个放在这个文件中
比如:
碰到的问题
有部分接口出现异常Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.
解决办法是修改maven-compiler-plugin
的插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<parameters>true</parameters> <!--增加-->
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
<compilerArgs><!--增加-->
<arg>-parameters</arg>
</compilerArgs>
<!--一些必备参数-->
<basedir/>
<buildDirectory/>
<mainOutputDirectory/>
<outputDirectory/>
<projectArtifact/>
</configuration>
</plugin>
文章作者 pengxiaochao
上次更新 2025-02-19
许可协议 不允许任何形式转载。