Springboot項目由JDK8升級至JDK17全過程教程【文末附源碼】

1. 前言

最近一直想把我的開源項目maple-boot升級到jdk17版本,然后接入Spring AI。拖延癥犯了一直拖拖拖,最近時間空閑較多,開始陸續著手升級。

整個升級過程 計劃分為3步。

  • step1:先將項目升級到jdk17,使用正常
  • step2:生成代碼的模板類升級到Jdk17對應的版本
  • step3:功能陸續驗證

本文主要記錄step1將項目升級過程中牽扯到依賴變動升級,當然項目用到的依賴并不算多,項目之外的這里不做記錄。

2. 準備環境

原項目版本:Jdk8 + springboot 2.7.12

升級后版本:Jdk17 + springboot 3.3.9

這里新建一個maple-boot-17的項目,然后將maple-boot下[base-manage]分支的代碼原封不動的復制進來。

接下來開始修改。

3. 版本升級

3.1 基礎依賴升級

  1. 首先把項目環境切換到Jdk17上

image-20250610224923815

  1. 父級pom文件中spring-boot-starter-parent版本升級到3.3.9

image-20250610225456304

  1. 項目配置中的java.version由8升級到17

  2. maven編譯相關maven.compiler.sourcemaven.compiler.target由8升到17

  3. 由于在jdk17中移除了javax的部分包,所以很多javax.xxx都需要修改jakarta.xxx

    這里主要包含:

    (1) javax.servlet

    (2) javax.annotation

    其它javax.net,javax.sql等則繼續保留著。

  4. lombok版本由1.16.18 升級 1.18.30

3.2 相關組件升級

  1. redis相關

? yml文件配置由spring.redis 變為spring.data.redis,多了一級data

image-20250610230441913

  1. mybatis plus相關
  • mybatis plus版本升級,由3.5.2升級到3.5.9,pom依賴artifactIdmybatis-plus-boot-starter變為mybatis-plus-spring-boot3-starter
  • 分頁插件剝離,新增分頁依賴com.baomidou:mybatis-plus-jsqlparser
  • 多數據源依賴升級,由3.5.2升級為4.0.0,pom依賴artifactIddynamic-datasource-spring-boot-starter變為dynamic-datasource-spring-boot3-starter
  • TODO:生成工具暫未調整,不確定是否有變化
  1. 對象轉化工具dozer版本升級,由6.2.0升級至7.0.0

  2. httpclient版本升級,升級至4.5.14

  3. 接口文檔knife4j升級

    com.github.xiaoymin:knife4j-spring-boot-starter:2.0.7變更為com.github.xiaoymin:knife4j-openapi3-jakarta-spring-boot-starter:4.0.0Knife4jConfiguration配置類變更

package com.maple.rest.config;import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.servers.Server;
import org.springframework.context.annotation.Configuration;/*** @author 笑小楓-https://www.xiaoxiaofeng.com* @date 2022/6/28*/
@Configuration
@OpenAPIDefinition(info = @Info(title = "笑小楓管理平臺接口",description = "管理平臺 API 文檔",version = "1.0"),servers = @Server(url = "https://www.xiaoxiaofeng.site/api/")
)
public class Knife4jConfiguration {}

注解變更

變更前變更后
@Api(tags = “body參數”)@Tag(name = “body參數”)
@ApiOperation(“普通body請求”)@Operation(summary = “普通body請求”)
@ApiModel(value = “對象描述”)@Schema(description = “對象描述”)
@ApiModelProperty(“參數名稱”)@Schema(description = “參數名稱”)

更多的變動可以參考官網,這里暫時沒有做進一步深究

image-20250610232535017

4. 功能測試

大體試了下,功能都還健在,后續整理生成工具時,會陸續測試功能細節。

image-20250611095808540

image-20250611095929529

5. 升級總結

本次項目版本依賴升級大致如下,可能有一些沒有記錄到。

依賴升級前升級后
JDK817
springboot2.7.123.3.9
mybatis plus3.5.23.5.9
dynamic datasource3.5.24.0.0
lombok1.16.181.18.30
nacos0.2.102.2.3
knife4j2.0.74.0.0
httpclient4.5.134.5.14
dozer6.2.07.0.0

6. 注意事項

  1. JDK版本與Spring Boot版本對應
    Spring Boot不同版本支持的JDK版本如下:
Spring Boot版本支持的JDK版本
Spring Boot 2.1.xJDK 8、JDK 11
Spring Boot 2.2.xJDK 8、JDK 11
Spring Boot 2.3.xJDK 8、JDK 11
Spring Boot 2.4.xJDK 8、JDK 11
Spring Boot 2.5.xJDK 8、JDK 11
Spring Boot 2.6.xJDK 8、JDK 11
Spring Boot 2.7.xJDK 11、JDK 17
Spring Boot 3.0.xJDK 17(基于Spring Framework 6)
  1. Maven版本與Spring Boot版本對應
    Maven作為構建工具,與Spring Boot的兼容性如下:
Spring Boot版本推薦的Maven版本
Spring Boot 2.1.xMaven 3.5.x
Spring Boot 2.2.xMaven 3.5.x、3.6.x
Spring Boot 2.3.xMaven 3.6.x
Spring Boot 2.4.xMaven 3.6.x
Spring Boot 2.5.xMaven 3.6.x
Spring Boot 2.6.xMaven 3.6.x
Spring Boot 2.7.xMaven 3.6.x、3.8.x
Spring Boot 3.0.xMaven 3.8.x
  1. 我用的idea 2021.3款的,不支持過高的maven版本,我這里使用的是maven 3.8.1。條件允許建議可以換更高版本的idea,感覺2024版的使用起來也更絲滑…

7.小結

升級過程中,程序可能會出現各種各式報錯,牽扯到相關依賴版本變更需要調整,本文中沒有出現的可以AI一下,也可以留言給我,后續會整理對應升級方案。

?附上本文調整后的源碼【maple-boot-17】https://gitee.com/hack-feng/maple-boot-17

?jdk8 版本戳這里 -> https://gitee.com/hack-feng/maple-boot

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84505.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84505.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84505.shtml

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

相關文章

同步與異步:軟件工程中的時空藝術與實踐智慧-以蜻蜓hr人才系統舉例-優雅草卓伊凡

同步與異步:軟件工程中的時空藝術與實踐智慧-以蜻蜓hr人才系統舉例-優雅草卓伊凡 概念解析:時空維度的編程范式 在軟件開發的宇宙中,同步(Synchronous)與異步(Asynchronous)是兩種根本不同的執行模式,它們塑造了程序與時間和空間…

TF-IDF算法的代碼實踐應用——關鍵詞提取、文本分類、信息檢索

回顧:TF-IDF算法詳解與實踐總結 上一篇文章我們深入剖析了TF-IDF的原理與細節,但實踐才是檢驗真理的唯一標準!今天,我們將從“紙上談兵”轉向“實戰演練”:通過純Python手寫實現與調用sklearn工具包兩種方式&#xff0…

前端面試寶典---事件循環面試題

瀏覽器進程模型與 JavaScript 執行機制 現代瀏覽器采用多進程架構,包含瀏覽器進程、渲染進程、網絡進程等多個核心進程。每個標簽頁會獨立創建一個渲染進程,負責頁面內容的解析、渲染和執行腳本代碼。 JavaScript 的單線程特性 JavaScript 采用單線程…

postman調用接口報錯401, Unauthorized, Invalid Token. null解決辦法

1、先登錄系統,F12找到token并復制 2、postman里選中Authorization,下拉選中選擇Bearer Token,把復制好的token黏貼到右側輸入框,如下所示: 3、如果是json格式的參數拷貝到Body中,如下所示: 4、 接口調用成功

C++----剖析list

前面學習了vector和string,接下來剖析stl中的list,在數據庫中學習過,list邏輯上是連續的,但是存儲中是分散的,這是與vector這種數組類型不同的地方。所以list中的元素設置為一個結構體,將list設計成雙向的&…

為什么已經有 Nginx 了,還需要服務網關?

在當前微服務架構中,雖然 Nginx 是一個高性能的反向代理和負載均衡服務器,但在實際使用中仍然存在諸多局限性。為了滿足運維效率、功能統一治理以及與微服務生態集成的需求,通常會在 Nginx 和業務服務之間引入一層基于 Java 實現的服務網關&a…

Kendo UI 中,ViewModel、DataSource 和 Grid的關系。Kendo 框架發起 HTTP 請求

Kendo UI 中,ViewModel、DataSource 和 Grid的關系 在 Kendo UI 中,ViewModel、DataSource 和 Grid 是構建動態數據應用的核心組件,三者協同工作實現數據的綁定、管理和展示。 一、三者關系圖解 #mermaid-svg-3lWxu2zWB23wDYEz {font-family…

宇樹開源 Qmini 雙足機器人,可通過 3D 打印動手制作,使用樹莓派作為主控制器

Unitree Qmini 是一款由宇樹科技設計并開源的低成本雙足機器人,開發者可以完全通過 3D 打印進行復刻。Qmini 專為業余愛好者、教育工作者和研究人員設計,使用戶能夠快速上手,并以類似樂高的模塊化方式組裝自己的機器人。該項目為機器人技術提…

解決華為云服務器無法ping通github問題

在push代碼到github上的時候,發現顯示22端口無法連接,在已經開放了端口,防火墻關閉的情況下仍然無法連接到GitHub。 發現是服務器和github斷連,選擇 sudo vim /etc/hosts 添加一下代碼 # GitHub Start140.82.121.4 gith…

關于electron-vite koffi 讀取 dll 打包等問題得記錄

koffi const koffi require(‘koffi’) import iconv from ‘iconv-lite’;const libPath path.resolve(__dirname, ‘…/…/resources/dll/sss.dll’) const yktLib koffi.load(libPath) const ret yktLib.func(‘string sss(string Url, string Data, string OutData)’…

【開發技術】.Net使用FFmpeg視頻特定幀上繪制內容

目錄 一、目的 二、解決方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg調用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 濾鏡來繪制 ROI 三、總結 一、目的 當前市場上有很多目標檢測智能識別的相關算法,當前調用一個醫療行業的AI識別算法后返回…

通過關鍵字批量抓取淘寶商品數據實現方法途徑分享--API

item_search 按關鍵字搜索淘寶商品item_search_tmall 按關鍵字搜索天貓商品item_search_pro 高級關鍵字搜索淘寶商品item_search_img 按圖搜索淘寶商品(拍立淘)item_search_shop 獲得店鋪的所有商品 一、引言 在電商領域,獲取淘寶商品數據對…

用 Lazarus IDE 寫一個郵件客戶端軟件,能收發郵件,編寫郵件

下面是一個使用Lazarus IDE開發的基本郵件客戶端實現方案,包含收發郵件和編寫郵件的核心功能。我們將使用Synapse庫(跨平臺的網絡通信庫)來處理郵件協議。 步驟1:安裝依賴 安裝Synapse庫: 下載地址:https:…

第二部分-IP及子網劃分

目錄 一、什么是IP? 1.1.IP地址的由來 1.2.IP地址的表示 1.3.IP地址的構成 1.4.IP地址的分類 1.5.IP地址類型 1.6.IP地址的計算 1.7.私網IP地址 1.8.特殊IP地址 二、子網劃分 2.1.什么是子網劃分及為什么要進行子網劃分? 2.2.如何進行子網劃分? 實例: …

【javascript】泡泡龍游戲中反彈和查找匹配算法

引言 泡泡龍游戲的核心玩法依賴于物理碰撞與顏色匹配的算法實現。反彈效果需要模擬泡泡與邊界或障礙物的彈性碰撞,確保軌跡符合物理規律;匹配算法則需快速檢測相鄰同色泡泡,觸發消除邏輯。高效的處理方式直接影響游戲流暢度和玩家體驗。 以…

如何使用deepseek滿血版

deepseek 訪問方式 DeepSeek滿血版可通過官方網站或官方應用商店下載安裝。確保設備滿足最低系統要求,如操作系統版本和硬件配置。 賬號注冊與登錄 訪問平臺后完成賬號注冊流程,提供必要信息并驗證郵箱或手機號。登錄后進入用戶中心,查看…

網絡管理【Linux/Unix/Windows】命令大全

在跨平臺網絡運維中,管理員常需快速切換Windows與Linux環境下的命令操作。本文整合了核心網絡管理命令的跨平臺對照表,涵蓋連通性測試、路由追蹤、DNS解析、ARP管理、會話監控等高頻場景。無論您負責服務器維護、網絡排障還是安全審計,此表可…

Gremlin創建schema(包括實體和關系)

1、構建圖譜schema,流程包括圖創建、實體構建以及關系構建。 創建圖時需要指定圖庫名稱以及主鍵字段。 實體構建時需要指定主鍵字段,每個屬性需要指定數據類型,是否非空以及默認值。關系構建時需要包括關系名稱、指向頭實體的標簽&#xff0c…

[論文閱讀]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代碼:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…

鴻蒙Next倉頡語言開發實戰教程:店鋪詳情頁

各位好,幽藍君又來分享倉頡開發教程了,今天的內容是店鋪詳情頁: 這個頁面的內容看似簡單,其實有很多小細節需要注意,主要還是讓大家熟悉List容器的使用。 整個頁面由導航欄和List容器兩大部分組成,導航欄我…