当前位置: 首页 > news >正文

springboot2.7.18 升级到3.1.5过程

 Spring Boot3 从 2.7.10升级到3.1.5有以下几个点需要注意。

  • JDK版本支持从JDK 17-19版本
  • javax.servlet切换到jakarta.servlet
  • spring.redis配置切换为spring.data.redis
  • Spring Cloud 2022.0.4
  • Spring Cloud Alibaba 2022.0.0.0

 Spring Boot3 升级参考文档:

  • spring boot升级参考
  • spring cloud升级参考
  • spring cloud alibaba升级参考

SpringBoot3版本代码示例:GitHub - jeecgboot/JeecgBoot at springboot3

查看springboot父级项目和依赖项目是否有依赖 springboot2.7.18,

若有责需要需要升级到3.1.5

相关依赖版本

<!-- 微服务 --><spring-cloud.version>2022.0.4</spring-cloud.version><spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version><alibaba.nacos.version>2.0.4</alibaba.nacos.version><xxl-job-core.version>2.4.1</xxl-job-core.version><fastjson.version>2.0.43</fastjson.version><aviator.version>5.2.6</aviator.version><pegdown.version>1.6.0</pegdown.version><commonmark.version>0.17.0</commonmark.version><knife4j-spring-boot-starter.version>4.4.0</knife4j-spring-boot-starter.version><!-- 数据库驱动 --><postgresql.version>42.2.25</postgresql.version><ojdbc6.version>11.2.0.3</ojdbc6.version><sqljdbc4.version>4.0</sqljdbc4.version><mysql-connector-java.version>8.0.27</mysql-connector-java.version><hutool.version>5.8.25</hutool.version><!-- 国产数据库驱动 --><kingbase8.version>9.0.0</kingbase8.version><dm8.version>8.1.1.49</dm8.version><!-- 积木报表--><jimureport-spring-boot-starter.version>1.9.4</jimureport-spring-boot-starter.version><!-- 持久层 --><mybatis-plus.version>3.5.3.2</mybatis-plus.version><dynamic-datasource-spring-boot-starter.version>4.1.3</dynamic-datasource-spring-boot-starter.version><druid.version>1.2.24</druid.version><commons-io.version>2.11.0</commons-io.version><commons.version>2.6</commons.version><aliyun-java-sdk-dysmsapi.version>2.1.0</aliyun-java-sdk-dysmsapi.version><aliyun.oss.version>3.17.3</aliyun.oss.version><!-- shiro --><shiro.version>1.12.0</shiro.version><java-jwt.version>3.11.0</java-jwt.version><shiro-redis.version>3.2.2</shiro-redis.version><codegenerate.version>1.4.9</codegenerate.version><autopoi-web.version>1.4.11</autopoi-web.version><minio.version>8.5.7</minio.version><justauth-spring-boot-starter.version>1.4.0</justauth-spring-boot-starter.version><dom4j.version>1.6.1</dom4j.version><qiniu-java-sdk.version>7.4.0</qiniu-java-sdk.version><jedis.version>3.8.0</jedis.version><baidu-java-sdk.version>4.16.19</baidu-java-sdk.version><!-- Log4j2爆雷漏洞 --><!-- spring boot 3 不支持下列两个版本--><!--<log4j2.version>2.17.0</log4j2.version>--><logback.version>1.4.12</logback.version>

升级activiti到8.0.0

添加activiti 指定仓库

由于7.1.0.M6以后 ,官方不再将构建制品发布到maven中央仓库了,而是发布在了alfresco仓库,这就需要我们仓库才能正确下载依赖.在pom中添加repositories标签,然后再添加repository标签。如果repositories已经有了,切不要再添加,而是将repository标签和里面的内容复制进去。最终效果如下

<repositories><repository><id>activiti-releases</id><url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases</url>
</repository>

我activiti项目中的全部依赖,含activiti

 <properties><activiti.version>8.0.0</activiti.version><pagehelper.boot.version>1.4.6</pagehelper.boot.version></properties><dependencies><!-- pagehelper 分页插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper.boot.version}</version></dependency><!--activiti--><dependency><groupId>org.activiti</groupId><artifactId>activiti-dependencies</artifactId><version>${activiti.version}</version><scope>import</scope><type>pom</type></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter</artifactId><version>${activiti.version}</version><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></exclusion><exclusion><artifactId>mybatis</artifactId><groupId>org.mybatis</groupId></exclusion><exclusion><artifactId>commons-io</artifactId><groupId>commons-io</groupId></exclusion><exclusion><artifactId>spring-jdbc</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>jakarta.persistence-api</artifactId><groupId>jakarta.persistence</groupId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.30</version> <!-- 根据你的Spring版本调整 --></dependency><dependency><groupId>org.jeecgframework.boot</groupId><artifactId>jeecg-system-biz</artifactId><version>3.7.3</version></dependency><!--引入微服务启动依赖 starter--><dependency><groupId>org.jeecgframework.boot</groupId><artifactId>jeecg-boot-starter3-cloud</artifactId><version>3.7.3</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><exclusions><exclusion><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version><exclusions><exclusion><artifactId>jsqlparser</artifactId><groupId>com.github.jsqlparser</groupId></exclusion><exclusion><artifactId>mybatis</artifactId><groupId>org.mybatis</groupId></exclusion><exclusion><artifactId>spring-jdbc</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency><!-- 引入定时任务依赖 --><dependency><groupId>org.jeecgframework.boot</groupId><artifactId>jeecg-boot-starter-job</artifactId><version>3.8.0</version></dependency><dependency><groupId>com.dameng</groupId><artifactId>Dm8JdbcDriver18</artifactId><version>8.1.1.49</version></dependency><dependency><groupId>com.dameng</groupId><artifactId>DmDialect-for-hibernate5.0</artifactId><version>8.1.1.49</version></dependency><dependency><groupId>org.jetbrains</groupId><artifactId>annotations</artifactId><version>26.0.2</version><scope>compile</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.hibernate.orm</groupId><artifactId>hibernate-core</artifactId><version>6.6.13.Final</version><exclusions><exclusion><artifactId>hibernate-commons-annotations</artifactId><groupId>org.hibernate.common</groupId></exclusion><exclusion><artifactId>jakarta.persistence-api</artifactId><groupId>jakarta.persistence</groupId></exclusion></exclusions> <!-- Spring Boot 3.1.x兼容版本 --></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-jpamodelgen</artifactId><version>6.6.13.Final</version><type>pom</type><scope>provided</scope></dependency></dependencies>
因activiti默认集成Security, SecurityConfig 需要全部放行但升级完写法也变了,注释的事boot2,下面没注释掉的是boot3的
package org.jeecg.modules.activiti.config.security;//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.security.config.annotation.web.builders.HttpSecurity;
//import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
//import org.springframework.security.core.userdetails.User;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.provisioning.InMemoryUserDetailsManager;
//import org.springframework.security.web.SecurityFilterChain;
//
//@Configuration
//@EnableWebSecurity
//public class SecurityConfig extends WebSecurityConfigurerAdapter {
//    @Override
//    public void configure(HttpSecurity http) throws Exception {
//
//        http.authorizeRequests()
//                .anyRequest().permitAll().and().logout().permitAll()//配置不需要登录验证
//                .and().headers().frameOptions().sameOrigin() // 解决  frame because it set 'X-Frame-Options' to 'deny'
//                .and().csrf().disable() //关闭跨站请求伪造
//        ;
//    }
//}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http// 授权配置.authorizeHttpRequests(auth -> auth.anyRequest().permitAll()  // 允许所有请求)// 登出配置.logout(logout -> logout.permitAll()  // 允许所有人访问登出端点)// 头部配置.headers(headers -> headers.frameOptions(frame -> frame.sameOrigin()  // 允许同源iframe嵌套))// CSRF配置.csrf(csrf -> csrf.disable()  // 禁用CSRF保护);return http.build();}
}

    #Shiro升级说明​

    由于Spring Boot内部的servlet包换掉了,所以shiro需要升级,不过还好shiro官方提供了支持,以下是shiro的升级替换。

    需要注意的是,spring boot 3.1.5对jedis的版本做了提升,提升后shiro无法兼容,所以只能在项目进行降版本处理。

    • shiro升级参考文档 Java17和springboot3.0使用shiro报ClassNotFoundException_shiro java17-CSDN博客
    <!--shiro--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring-boot-starter</artifactId><version>${shiro.version}</version><exclusions><exclusion><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId></exclusion></exclusions></dependency><!-- shiro-redis --><dependency><groupId>org.crazycake</groupId><artifactId>shiro-redis</artifactId><version>${shiro-redis.version}</version><exclusions><exclusion><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId></exclusion><exclusion><artifactId>checkstyle</artifactId><groupId>com.puppycrawl.tools</groupId></exclusion></exclusions></dependency><!-- shiro 无法使用 spring boot 3.X 自带的jedis,降版本处理 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><classifier>jakarta</classifier><version>${shiro.version}</version><!-- 排除仍使用了javax.servlet的依赖 --><exclusions><exclusion><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId></exclusion><exclusion><groupId>org.apache.shiro</groupId><artifactId>shiro-web</artifactId></exclusion></exclusions></dependency><!-- 引入适配jakarta的依赖包 --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><classifier>jakarta</classifier><version>${shiro.version}</version></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-web</artifactId><classifier>jakarta</classifier><version>${shiro.version}</version><exclusions><exclusion><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId></exclusion></exclusions></dependency>
    

    #knife4j升级说明​

    knife4j对于spring boot 3.X版本提供了支持,不过相当于spring boot 2.X的版本来说,差异比较大,从springfox转换成了springdoc,不能做到平滑升级,以下是需要替换的注解列表.

    knife4j升级参考文档:​

    • Knife4j版本参考 | Knife4j
    • OpenAPI 3 Library for spring-boot

    knife4j 2版本与3版注解变化如下:​

    便于大家快速升级,官方写了一个Python脚本,可以快速将整个项目升级为springdoc注解。

    • @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 = "foo", notes = "bar") → @Operation(summary = "foo", description = "bar")
    • @ApiParam → @Parameter
    • @ApiResponse(code = 404, message = "foo") → @ApiResponse(responseCode = "404", description = "foo")

    同样在初始化文档对象上也有区别,以下前后替换

    [@Bean](https://my.oschina.net/bean)public GroupedOpenApi swaggerOpenApi() {return GroupedOpenApi.builder().group("default").packagesToScan("org.jeecg").build();}[@Bean](https://my.oschina.net/bean)public OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("JeecgBoot 后台服务API接口文档").version("1.0").contact(new Contact().name("北京国炬信息技术有限公司").url("www.jeccg.com").email("jeecgos@163.com")).description( "后台API接口").termsOfService("NO terms of service").license(new License().name("Apache 2.0").url("http://www.apache.org/licenses/LICENSE-2.0.html")));}// ---------------------------替换后---------------------[@Bean](https://my.oschina.net/bean)public GroupedOpenApi swaggerOpenApi() {return GroupedOpenApi.builder().group("default").packagesToScan("org.jeecg").build();}[@Bean](https://my.oschina.net/bean)public OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("JeecgBoot 后台服务API接口文档").version("1.0").contact(new Contact().name("北京国炬信息技术有限公司").url("www.jeccg.com").email("jeecgos@163.com")).description( "后台API接口").termsOfService("NO terms of service").license(new License().name("Apache 2.0").url("http://www.apache.org/licenses/LICENSE-2.0.html")));}
    

    升级的maven地址:

    		<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.3.0</version></dependency>
    

    在knife4j 4.X版本中,首次在对swagger文档与spring cloud gateway进行了整合,提供完整的解决方案,做到了开箱即用,以下是应用案例

            <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>4.3.0</version></dependency>
    

    #spring boot 3.x 生态平滑升级​

    以下为平滑升级,即更换版本即可,不需要做任何调整

    		<!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.20</version></dependency><!-- 动态数据源 --><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot3-starter</artifactId><version>4.1.3</version></dependency><!-- spring boot-admin --><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>3.0.4</version></dependency>
    

    #META-INF升级spring.factories​

    新建文件 org.springframework.boot.autoconfigure.AutoConfiguration.imports 把需要自动加载的启动类一行一个全限定名就可以了 替换原来的spring.factories

    升级小技巧​

    模块快速升级springboot3改造过程

    第一步:切换项目JDK和Maven的JDK为17
    第二步:替换过时类搜索javax.servlet.http.HttpServletRequest 替换为jakarta.servlet.http.HttpServletRequest
    搜索javax.servlet.http.HttpServletResponse 替换为jakarta.servlet.http.HttpServletRequest
    搜索javax.websocket 替换为jakarta.websocket搜索@Api替换为//@Api
    搜索@AutoLowApp替换为//@AutoLowApp
    搜索io.swagger.annotations.ApiModel删掉
    搜索io.swagger.annotations.Api删掉
    搜索javax.annotation.Resource删掉
    

    开源删除类

    搜索org.jeecg.common.constant.enums.LowAppAopEnum删掉
    搜索org.jeecg.common.aspect.annotation.AutoLowApp删掉
    搜索org.jeecg.common.bpm.api.IBpmBaseExtApi删掉

    mvnhelp解决冲突

    依赖冲突这个事情就不详细讲了,每个项目的情况都不一样,

    你可以用mvnhelp解决冲突,若有依赖冲突报错再想着去Exclude掉,不用把显示的所有依赖全部去掉,那样项目可能反而起不来

     Maven Helper mvn项目冲突如何解决_maven helper运行时冲突-CSDN博客

    http://www.xdnf.cn/news/424171.html

    相关文章:

  • Ubuntu 22.04.5 LTS 系统中配置仓库源
  • Gartner《如何有效融合Data Fabric 与Data Mesh数据战略》学习心得
  • 【TDengine源码阅读】DLL_EXPORT
  • 【设备管理—磁盘调度算法】
  • 【FMMT】基于模糊多模态变压器模型的个性化情感分析
  • 动态引入document.write的脚本
  • 出于PCB设计层面考虑,连排半孔需要注意哪些事项?
  • 5. 动画/过渡模块 - 交互式仪表盘
  • talk-linux 不同用户之间终端通信
  • C++ 基础知识
  • C++—特殊类设计设计模式
  • 汇添富基金徐寅喆:低利率环境下的短债基金投资策略
  • Hadoop的目录结构和组成
  • CSS3 基础知识、原理及与CSS的区别
  • 基于FPGA的视频接口之千兆网口(六GigE纯逻辑)
  • 使用scp命令拷贝hadoop100中文件到其他虚拟机中
  • SQL、Oracle 和 SQL Server 的比较与分析
  • 数据结构(一) 绪论
  • 【C语言极简自学笔记】井字棋开发
  • Ozon平台产品关键词优化指南:精准引流与转化提升实战策略
  • 影刀RPA开发-CSS选择器介绍
  • 中国品牌日 | 以科技创新为引领,激光院“风采”品牌建设结硕果
  • vscode 同一个工作区,不同文件夹之间跳转问题
  • 嵌入式学习笔记 - HAL_ADC_ConfigChannel函数解析
  • 2025-05-13 Unity 网络基础12——大小端模式
  • centos中JDK_PATH 如何设置
  • 从 Vue3 回望 Vue2:事件总线的前世今生
  • Oracles数据库通过存储过程调用飞书接口推送群组消息
  • FPGA:XILINX FPGA产品线以及器件选型建议
  • MySQL 8.0 OCP(1Z0-908)英文题库(31-40)