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

 更新时间:2024年12月16日 11:49:09   作者:冰之杍  
本文详细记录了将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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java版数独游戏核心算法(一)

    java版数独游戏核心算法(一)

    这篇文章主要为大家详细介绍了java版数独游戏的核心算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Spring Boot 整合持久层之MyBatis

    Spring Boot 整合持久层之MyBatis

    在实际开发中不仅仅是要展示数据,还要构成数据模型添加数据,这篇文章主要介绍了SpringBoot集成Mybatis操作数据库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • apache ant进行zip解压缩操作示例分享

    apache ant进行zip解压缩操作示例分享

    本文主要介绍了使用apache ant进行zip解压缩操作的方法,可以解决中文编码和首层父类无法创建问题,需要的朋友可以参考下
    2014-02-02
  • Java基础之常用的命令行指令

    Java基础之常用的命令行指令

    这篇文章主要介绍了Java基础之常用的命令行指令,文中有非常详细的图文示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • springboot整合shardingsphere和seata实现分布式事务的实践

    springboot整合shardingsphere和seata实现分布式事务的实践

    本文主要介绍了springboot整合shardingsphere和seata实现分布式事务的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 基于java构造方法Vector删除元素源码分析

    基于java构造方法Vector删除元素源码分析

    这篇文章主要介绍了基于java构造方法中对Vector删除元素的源码分析,有需要的朋友可以借鉴参考下,希望可以有所帮助,祝大家早日升职加薪
    2021-09-09
  • Spring Boot REST国际化的实现代码

    Spring Boot REST国际化的实现代码

    本文我们将讨论如何在现有的Spring Boot项目中添加国际化。只需几个简单的步骤即可实现Spring Boot应用的国际化,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • Java中BigDecimal的舍入模式解析(RoundingMode)

    Java中BigDecimal的舍入模式解析(RoundingMode)

    这篇文章主要介绍了Java中BigDecimal的舍入模式解析(RoundingMode),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Seata AT模式前后镜像是如何生成详解

    Seata AT模式前后镜像是如何生成详解

    这篇文章主要为大家介绍了Seata AT模式前后镜像是如何生成的方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 最新log4j2远程代码执行漏洞(附解决方法)

    最新log4j2远程代码执行漏洞(附解决方法)

    Apache Log4j2 远程代码执行漏洞攻击代码,该漏洞利用无需特殊配置,经多方验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响,本文就介绍一下解决方法
    2021-12-12

最新评论