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

Spring Boot 2.0 升级至 3.5 JDK 1.8 升级至 17 全面指南

一、版本升级背景

  1. 升级动机

    • Spring Boot 2.0 到 3.5 的重大更新(如Jakarta EE 9+包路径变更、GraalVM支持等)
    • JDK 1.8 到 17 的语言特性升级(如sealed class、record等)
    • 安全性与性能优化需求
  2. 升级目标

    • 兼容性验证
    • 依赖库版本适配
    • 代码兼容性修复

二、升级前依赖对比

升级前 POM.xml 核心配置
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version>
</parent><properties><jedis.version>2.9.3</jedis.version><nacos.version>2.1.0</nacos.version><nacos.httpclient.version>4.5.8</nacos.httpclient.version><nacos.springboot.starter.version>0.2.10</nacos.springboot.starter.version>
</properties>
升级后 POM.xml 核心配置
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.3</version>
</parent><properties><java.version>17</java.version><jedis.version>2.9.3</jedis.version><feign.version>12.5</feign.version> <!-- Feign版本适配 --><nacos.version>2.3.2</nacos.version> <!-- Nacos Client升级 --><nacos.httpclient.version>4.5.14</nacos.httpclient.version><nacos.springboot.starter.version>0.3.0-RC</nacos.springboot.starter.version> <!-- 新坐标 -->
</properties>

再补充一个升级后的配置:

    <properties><java.version>17</java.version> <!-- 升级JDK版本 --><maven.compiler.release>17</maven.compiler.release><feign.version>12.5</feign.version> <!-- 升级Feign --><log4j2.version>2.23.1</log4j2.version> <!-- 升级Log4j2 --><nacos.version>2.3.2</nacos.version> <!-- 升级Nacos Client --><nacos.httpclient.version>4.5.14</nacos.httpclient.version><nacos.springboot.starter.version>0.3.0-RC</nacos.springboot.starter.version> <!-- 新坐标 --><jackson.version>2.18.2</jackson.version> <!-- 升级Jackson --><netty.version>4.1.122.Final</netty.version> <!-- 升级Netty --><snakeyaml.version>2.2</snakeyaml.version> <!-- 升级SnakeYAML --></properties>

三、升级过程中遇到的问题及解决方案

问题一:Jasypt 解密失败
  1. 错误表现
    • 启动时报 Invalid decryptor configuration
  2. 解决方案
    • 在启动类添加注解:@EnableEncryptableProperties
    • 补充配置项(application.yml):
      jasypt:encryptor:password: your_passwordalgorithm: PBEWithMD5AndTripleDES
      
    • 补充建议
      • 检查 Jasypt 版本是否兼容 Spring Boot 3.5(推荐升级至 3.0.4+)
      • 避免使用不安全的算法(如 PBEWithMD5AndDES

问题二:Log4j 配置冲突
  1. 错误表现
    • 启动时报 No configuration file found 或依赖冲突
  2. 解决方案
    • 排除冲突依赖(通过 mvn dependency:tree 分析)
    • 显式指定 Log4j2 配置路径:
      logging:config: classpath:env/dev/log4j2.xml
      
    • 补充建议
      • Spring Boot 3.x 默认使用 Logback,若需保留 Log4j2,需显式添加依赖:
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        

问题三:MyBatis 注入失败
  1. 错误表现
    • DB和mybatis的问题,遇到xxx bean that could not be found(Dao或者Mapper),无法注入
  2. 解决方案
  3. 确保目标包能被扫描到:@MapperScan(“net.xxx.prov.xxx.dao.xxx”)
  4. 配置文件加上:
mybatis.mapper-locations=classpath:/mybatis/mapper/*.xml
mybatis.config-location=classpath:/mybatis/mybatis-config.xml
  1. 看看配置类是否有注入,没有配置类请加上:
    MybatisConfig.class:
@Configuration
@MapperScan(basePackages = "net.xxxx.prov.xxx.dao.xxx", sqlSessionTemplateRef = "SqlSessionTemplate", sqlSessionFactoryRef = "SqlSessionFactory")
public class MybatisConfig {@Bean(name = "SqlSessionFactory")public SqlSessionFactory SqlSessionFactory(@Qualifier("DataSource") DataSource DataSource) throws Exception {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(myhkbnDataSource);sessionFactory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("/mybatis/mybatis-config.xml"));sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("/mybatis/mapper/xxx/*.xml"));return sessionFactory.getObject();}@Bean(name = "SqlSessionTemplate")public SqlSessionTemplate SqlSessionTemplate(@Qualifier("SqlSessionFactory") SqlSessionFactory SqlSessionFactory){return new SqlSessionTemplate(SqlSessionFactory);}
}
  1. 如果绑定了配置文件前缀,需要添加配置类
@Configuration
public class DataSourceConfig {@Bean(name = "DataSource")@ConfigurationProperties(prefix = "spring.datasource.xxx") // 绑定配置文件中的前缀public DataSource DataSource() {return DataSourceBuilder.create().build();}
}
  1. 问题:jdbcUrl is required with driverClassName
    解决:spring.datasource.xxx.url 改成:spring.datasource.xxx.jdbc-url
  • 补充建议
    • 检查 MyBatis 版本是否兼容 Spring Boot 3.5(推荐升级至 3.5.10+)
    • 使用 @ConfigurationProperties 绑定数据源时,确保前缀正确(如 spring.datasource.xxx

问题四:Redis 连接失败
  1. 错误表现
    • RedisConnectionFailureException 或 SSL 配置异常,问题:RedisConnectionFailureException: Cannot get Jedis connection at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:932)

解决:检查配置文件,新版的配置前缀改名了,特别注意ssl的配置,多了个enabled,源码位置:org.springframework.boot.autoconfigure.data.redis.RedisProperties

  1. 解决方案
    • 注意 Spring Boot 3.x 默认使用 Lettuce,而非 Jedis
    • 更新 Redis 配置(application.yml):
      spring:data:redis:host: 127.0.0.1port: 6379timeout: 5000mslettuce:pool:max-active: 500max-idle: 250min-idle: 0max-wait: 5000msssl:enabled: true
      
    • 补充建议
      • 若仍需使用 Jedis,需显式添加依赖并排除 Lettuce
      • 测试 Redis 服务的 SSL 证书是否有效

四、JDK 1.8 升级至 17 的注意事项

  1. 语言特性变更
    • 移除 javax.xml.bind 等模块(需手动添加依赖)
    • 使用 recordssealed class 优化代码
  2. JVM 参数调整
    • 默认垃圾回收器改为 G1(无需额外配置)
    • 检查 -XX:+UseParallelGC 等参数是否仍适用
  3. 第三方库兼容性
    • 确保所有依赖支持 JDK 17(如 Jackson、Hibernate 等)

http://www.dtcms.com/a/326046.html

相关文章:

  • 计算机视觉CS231n学习(7)
  • 【Altium designer】解决报错“Access violation at address...“
  • 【代码随想录day 17】 力扣 617.合并二叉树
  • python魔法方法__str__()介绍
  • 【Lua】题目小练9
  • 从零构建自定义Spring Boot Starter:打造你的专属开箱即用组件
  • 爬虫与数据分析入门:从中国大学排名爬取到数据可视化全流程
  • Go语言构建高性能AI分析网关:原理与实战
  • 设计模式笔记_结构型_组合模式
  • React(四):事件总线、setState的细节、PureComponent、ref
  • Jenkins 搭建鸿蒙打包
  • 【k8s】k8s中的几个概念性问题
  • day48 力扣739. 每日温度 力扣496.下一个更大元素 I 力扣503.下一个更大元素II
  • 轻量级解决方案:如何高效处理Word转PDF?
  • k8s的calico是什么作用,举例一下
  • 【2025最新版】PDF24 Creator,PDF编辑,合并分割,格式转换全能工具箱,本地离线版本,完全免费!
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day1
  • 【12-激活函数】
  • 【PRML】分类
  • 普通大学本科生如何入门强化学习?
  • 算法73. 矩阵置零
  • MySQL权限管理和MySQL备份
  • 银行客户经营:用企业微信精准破解触达断层、效率瓶颈、数据孤岛三个痛点
  • GPT-5 全面解析与最佳实践指南
  • 容器 K8S Docker Kata 学习(一)
  • idea三个环境变量设置
  • Spring Boot Excel数据导入数据库实现详解
  • Spring-Security-5.7.11升级6.5.2
  • Socket(套接字)网络编程
  • Scala异步任务编排与弹性容错机制