java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot2升级到springboot3

springboot2升级到springboot3过程相关修改记录

作者:冰之杍

本文详细记录了将Spring Boot 2升级到Spring Boot 3的过程,包括升级JDK到17、修改依赖、配置文件调整以及处理一些特定问题,如Redisson版本升级和Swagger配置,感兴趣的朋友跟随小编一起看看吧

近期项目被扫描出关于Spring Framework路径遍历漏洞(CVE-2024-38816),客户要求整改,查了下springboot2需要升级到5.3.40才可以,但springboot2好像不太能很快就升级,或者有可能不再会升级了,因此直接就将springboot升级到3了,本想着万年jdk8,但springboot3不支持jdk8,看样子要打破了,因此利用周末做了一下升级测试,记录如下:

以下为我进行springboot2升级到springboot3过程相关修改记录,备查,你的项目不一定用到下面所有的,可以参考着改

主要修改

jdk升级

按springboot3要求,升级到jdk17或jdk21,我这边是升级到jdk17

spring-boot-starter-parent

spring-boot-starter-parent依赖版本升级

升级前

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.18</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

升级后

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.4.0</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

jdk源码编码修改,将1.8改成17或21

修改前

<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		</plugins>
	</build>

修改后

<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>17</source>
					<target>17</target>
				</configuration>
			</plugin>
		</plugins>
	</build>

javax.servlet.*相关的类找不到,需要切换依赖为jakarta.servlet

<!--jakarta.servlet start -->
		<dependency>
			<groupId>jakarta.servlet</groupId>
			<artifactId>jakarta.servlet-api</artifactId>
		</dependency>
		<!--jakarta.servlet end -->

同时,将所有javax.servlet.*修改为jakarta.servlet.*

另外校验类相关的也进行修改javax.validation.*修改为jakarta.validation.*

mybatis-plus-boot-starter升级

mybatis-plus-boot-starter需要升级,不升可能会报Invalid value type for attribute ‘factoryBeanObjectType’: java.lang.String,需要升级一下依赖

升级成:mybatis-plus-spring-boot3-starter,我使用的是3.5.5

<!-- mybatis-plus start-->
		<dependency>
		    <groupId>com.baomidou</groupId>
		    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
		    <version>3.5.5</version>
		</dependency>
		<!-- mybatis-plus end-->

redis修改

配置上需要加上data

需要修改redis的配置:由原来的spring.redis.修改为spring.data.redis.

改完后重启又发现如下错误:
Unable to make field private final byte[] java.lang.String.value accessible: module java.base does not “opens java.lang” to unnamed module @2bbaf4f0

原因是redission版本比较低,我升级版本后就没问题了

升级前版本:<redisson.version>3.12.5</redisson.version>

升级后版本:<redisson.version>3.40.2</redisson.version>

swagger升级到springboot3

<swagger3.version>2.7.0</swagger3.version>
<!-- swagger3 start -->
		<dependency>
      <groupId>org.springdoc</groupId>
      <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
      <version>${swagger3.version}</version>
    </dependency>
    <!-- swagger3 end -->

swagger3默认是开启了接口和doc的访问的如引入上面的依赖后,可以通过如下地址访问(假如端口为8080,context-path为/test)

http://localhost:8080/test/swagger-ui/index.html
http://localhost:8080/test/v3/api-docs

注:如果生产环境中需要禁用,使用如下配置进行,分别进行ui的禁用和api-docs的禁用

springdoc:
  swagger-ui:
    enabled: true
  api-docs:
    enabled: true

其他修改参考

如果用到了阿里巴巴druid数据源,最好升级到新版本

我这里是从druid的1.2.12版本升级到了1.2.24

注:我使用的是编程式的阿里巴巴的监控配置,WebStatFilter和StatViewServlet的实现类需要修改,如果不是用编程式,可以不用管这一步

import com.alibaba.druid.support.jakarta.WebStatFilter;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.annotation.WebInitParam;
//注意不要忘记在 SpringBootSampleApplication.java 上添加 @ServletComponentScan 注解,不然就是404了。
@WebFilter(
		filterName = "druidWebStatFilter", urlPatterns = "/*", 
		initParams = { @WebInitParam(name = "exclusions", value = "weburi.json,.html,.js,.gif,.jpg,.png,.css,.ico,/druid/*") // 忽略资源
})
public class DruidStatFilter extends WebStatFilter {
}
import com.alibaba.druid.support.jakarta.StatViewServlet;
import jakarta.servlet.annotation.WebInitParam;
import jakarta.servlet.annotation.WebServlet;
//注意不要忘记在 SpringBootSampleApplication.java 上添加 @ServletComponentScan 注解,不然就是404了。
@WebServlet(urlPatterns="/druid/*",  
    initParams={  
         @WebInitParam(name="allow",value=""),// IP白名单(没有配置或者为空,则允许所有访问)  
         @WebInitParam(name="deny",value=""),// IP黑名单 (存在共同时,deny优先于allow)  
         @WebInitParam(name="loginUsername",value="admin"),// 用户名  
         @WebInitParam(name="loginPassword",value="123456"),// 密码  
         @WebInitParam(name="resetEnable",value="true")// 启用HTML页面上的“Reset All”功能  
})  
public class DruidStatViewServlet extends StatViewServlet {  
    private static final long serialVersionUID = -2688872071445249539L;  
}  

LocalVariableTableParameterNameDiscoverer类找不到

springboot3中没有这个类了,需要修改成org.springframework.core.StandardReflectionParameterNameDiscoverer

到此这篇关于springboot2升级到springboot3过程相关修改的文章就介绍到这了,更多相关springboot2升级到springboot3内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文