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.pswp.cn/web/92777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92777.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

級數學習筆記

級數學習筆記 一、數學基礎 1. 數項級數&#xff08;Number Series&#xff09; 數項級數是指形如&#xff1a; ∑(n1 to ∞) a? a? a? a? ...的無窮和。 1.1 收斂性判別法 比較判別法比值判別法根值判別法積分判別法萊布尼茨判別法&#xff08;交錯級數&#xff09; 2…

Linux811 YUM;SHELL:if else fi,for

vsftpdok [rootweb ~]# vim vsftpdok.sh 您在 /var/spool/mail/root 中有新郵件 [rootweb ~]# cat vsftpdok.sh rpm -ql vsftpd >/dev/null 2>&1 if [ $? -eq 0 ];then echo "OK" else yum install vsftpd -y if [ $? -eq 0 ];then echo "install o…

運維學習Day20——MariaDB數據庫管理

文章目錄MariaDB 數據庫管理介紹 MariaDB數據庫介紹數據庫種類關系數據庫MariaDB 介紹部署 MariaDB安裝 MariaDB加固 MariaDB連接 MariaDB配置 MariaDBMariaDB 中 SQL描述 SQL連接數據庫數據庫操作查詢數據庫列表使用數據庫創建數據庫刪除數據庫表操作環境準備查詢表查詢表列表…

itertools:迭代器函數

文章目錄一、合并和分解迭代器1、chain&#xff1a;首尾相接2、zip / zip_longest&#xff1a;對齊取數3、islice&#xff1a;切片4、tee&#xff1a;分裂二、轉換輸入1、map / starmap&#xff1a;函數映射三、生成新值1、count&#xff1a;生成連續整數2、repeat&#xff1a;…

【AI論文】序列標注任務廣義化研究(SFT廣義化):基于獎勵修正的強化學習視角

摘要&#xff1a;我們針對大語言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;的監督微調&#xff08;Supervised Fine-Tuning&#xff0c;SFT&#xff09;提出了一種簡單但具有理論依據的改進方法&#xff0c;以解決其與強化學習&#xff08;Reinforcemen…

(已解決)Mac 終端上配置代理

說明&#xff1a;為了便于理解&#xff0c;本文描述略顯“抽象”與“潦草”&#xff0c;為了過審&#xff0c;僅供學習交流使用。&#x1f680; 簡潔流程版啟動工具 點擊圖標&#xff0c;復制它給出的終端命令將這段內容粘貼進你的配置文件中&#xff08;~/.zshrc 或 ~/.bash_p…

Anti-Aliasing/Mip-NeRF/Zip-NeRF/multi-scale representation

前言 CSDN的文章寫太多&#xff0c;都不記得之前寫的有什么了&#xff0c;但習慣了在這里記錄&#xff0c;先寫上吧。關于multi-scale representation又是看著忘著&#xff0c;還是寫下點什么比較啊。時看時新&#xff0c;還是想吐槽自己看論文太不認真了。下面直接按照文章順序…

板塊三章節3——NFS 服務器

NFS 服務器 NFS 服務介紹 NFS 是Network File System的縮寫&#xff0c;即網絡文件系統&#xff0c;最早由Sun公司開發&#xff0c;**用來在UNIX&Linux系統間實現磁盤文件共享的一種方法。**它的主要功能是通過網絡讓不同的主機系統之間可以共享文件或目錄。NFS客戶端&…

數學建模——最大最小化模型

1.概念最大最小化模型&#xff08;Maximin Model&#xff09;是一種優化方法&#xff0c;旨在最大化最壞情況下的收益或最小化最壞情況下的損失。常見的現實問題有&#xff1a;求最大值的最小化問題最大風險的最低限度最小化最壞情況下的損失等2.一般數學模型 (找最大值里面最小…

【JAVA】使用系統音頻設置播放音頻

代碼直接可以運行 import javax.sound.sampled.*; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets;public class SystemDefaultAudioPlayer {// 強制使用的通用音頻格式private st…

[CSP-J 2021] 小熊的果籃

題目 12代碼 #include <bits/stdc.h> using namespace std; const int N2e55; struct node{int pre,//上一個水果塊(對于水果就是上個水果)l,//塊開始的序號&#xff0c;左邊界 d,//塊類型&#xff0c;0/1id,//水果序號 r,//塊結束的序號&#xff0c;右邊界 next;//下一塊…

【C++】STL二叉搜索樹——map與set容器的基礎結構

目錄 前言 1.二叉搜索樹的概念 1.1基本結構 1.2性能分析 2.二叉搜索樹的實現 2.1創建 2.2插入 2.3查找與遍歷 2.4刪除 3.二叉搜索樹類代碼 前言 C中STL的map與set容器廣泛應用于實踐過程中&#xff0c;本文將詳細分析容器最基礎的二叉搜索樹結構&#xff0c;為后續map…

基于Spring Boot和SSE的實時消息推送系統

一、SSE技術深度解析 1.1 協議工作原理 #mermaid-svg-u7ZBlEsXcn68R5a8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-u7ZBlEsXcn68R5a8 .error-icon{fill:#552222;}#mermaid-svg-u7ZBlEsXcn68R5a8 .error-text{fi…

Day 40 訓練和測試的規范寫法

知識點回顧&#xff1a; 彩色和灰度圖片測試和訓練的規范寫法&#xff1a;封裝在函數中展平操作&#xff1a;除第一個維度batchsize外全部展平dropout操作&#xff1a;訓練階段隨機丟棄神經元&#xff0c;測試階段eval模式關閉dropout 作業&#xff1a;仔細學習下測試和訓練代…

分析代碼并回答問題

代碼 <template><div>Counter: {{ counter }}</div><div>Double Counter: {{ doubleCounter }}</div> </template><script setup lang"ts"> import { ref, computed } from "vue";const counter ref(0);const …

在macOS上掃描192.168.1.0/24子網的所有IP地址

在macOS上掃描192.168.1.0/24子網的所有IP地址&#xff0c;可以通過終端命令實現。以下是幾種常用方法&#xff1a; 使用ping命令循環掃描 打開終端執行以下腳本&#xff0c;會逐個ping測試192.168.1.1到192.168.1.254的地址&#xff0c;并過濾出有響應的IP&#xff1a; for i …

Java基礎05——類型轉換(本文為個人學習筆記,內容整理自嗶哩嗶哩UP主【遇見狂神說】的公開課程。 > 所有知識點歸屬原作者,僅作非商業用途分享)

Java基礎05——類型轉換 類型轉換 由于Java是強類型語言&#xff0c;所以要進行有些運算的時候&#xff0c;需要用到類型轉換。 如&#xff1a;byte(占1個字節)&#xff0c;short(占2個字節)&#xff0c;char(占2個字節)→int(4個字節)→long(占8個字節)→float(占4個字節)→do…

mysql基礎(二)五分鐘掌握全量與增量備份

全量備份 Linux環境 數據備份 數據庫的備份與恢復有多中方法&#xff0c;通過mysql自帶的mysqldump工具可對數據庫進行備份。語法&#xff1a; mysqldump -u username -p password --databases db_name > file_name .sql說明&#xff1a; -u參數指定用戶名&#xff0c;usern…

使用Windbg分析多線程死鎖項目實戰問題分享

目錄 1、問題描述 2、使用.effmach x86命令切換到32位上下文 3、切換到UI線程&#xff0c;發現UI線程死鎖了 4、使用!locks命令查看臨界區鎖的詳細信息&#xff0c;遇到了問題 5、使用dt命令查看臨界區對象信息&#xff0c;找到發生死鎖的多個線程 6、用戶態鎖與內核態鎖…

防火墻組網方式總結

一、部署模式&#xff1a;靈活適配多樣網絡環境下一代防火墻&#xff08;NGAF&#xff09;具備極強的網絡適應能力&#xff0c;支持五種核心部署模式&#xff0c;可根據不同網絡需求靈活選擇。路由模式&#xff1a;防火墻相當于路由器&#xff0c;位于內外網之間負責路由尋址&a…