欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于JDK8升級17及springboot?2.x升級3.x詳細指南

 更新時間:2025年01月18日 10:42:26   作者:墨鴉_Cormorant  
這篇文章主要介紹了關于JDK8升級17及springboot?2.x升級3.x的相關資料,還討論了JPA包路徑從javax改為jakarta,以及Spring?Boot版本升級和Redis配置調整等,需要的朋友可以參考下

JDK 8 升級 17

簡介

從 JDK 8 升級到 JDK 17 的過程中,有幾個主要的變化,特別是 Java Platform Module System (JPMS) 的引入,以及一些包路徑的調整。以下是與 JDK 17 相關的一些重要變化:

  • Java Platform Module System (JPMS)

    • 模塊化:JDK 9 引入了模塊系統(tǒng),將標準 Java 庫劃分為多個模塊。這影響了 JDK 17 中的包結構和類的組織方式。
    • 模塊路徑:JDK 11 引入了 --module-path 和 --add-modules 選項,允許用戶指定模塊路徑和加載特定模塊。
  • Java EE APIs 移除

    • JAX-RSjavax.ws.rs.* 包現在不在標準 Java SE 平臺上。
    • JAX-WSjavax.xml.ws.* 包現在不在標準 Java SE 平臺上。
    • JAX-Bjavax.xml.bind.* 包現在不在標準 Java SE 平臺上。
  • 其他變化

    • JavaFX:JavaFX 已經從標準 Java SE 平臺中移除,現在作為一個獨立的模塊存在。

      如果應用使用了 JavaFX,確保已經添加了 JavaFX 模塊到應用中

    • JSR 355:JSR 355 定義了一些與 JavaFX 相關的包,這些包也不再包含在標準 Java SE 平臺上。

  • JDK 17 中的新特性

    • JEP 391: Foreign Function & Memory API (Incubator):提供了與外部代碼和內存交互的能力。
    • JEP 403: Sealed Classes:允許類聲明為密封,以限制繼承。
    • JEP 404: Pattern Matching for switch (Preview):引入了模式匹配支持到 switch 語句中。
    • JEP 414: Vector API (Fourth Incubator):提供了一種利用向量硬件指令的途徑。

javax.* 包移到 jakarta.*

  • Jakarta EE 技術棧:隨著 Java EE 轉變?yōu)?Jakarta EE,許多 javax.* 包已經被遷移到 jakarta.*包下。這對于使用 Java Persistence API (JPA)、JSF、EJB 等技術的應用尤為重要。

    • javax.persistence.* -> jakarta.persistence.*
    • javax.faces.* -> jakarta.faces.*
    • javax.ejb.* -> jakarta.ejb.*
    • javax.servlet.* -> jakarta.servlet.*
    • javax.servlet.jsp.* -> jakarta.servlet.jsp.*
    • javax.websocket.* -> jakarta.websocket.*
    • javax.naming.* -> jakarta.naming.*
    • javax.sql.* -> jakarta.sql.*
    • javax.transaction.* -> jakarta.transaction.*

    JDK 8 升級到 JDK 17 需確保代碼中引用了正確的包名。應該使用 jakarta.* 而不是 javax.*

maven pom 中更新 java 版本

  • 建議在父項目添加全局變量 java.version,然后在 maven-compiler-plugin 引用

    <properties>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.10.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

springboot 2.x 升級 3.x

spring-boot 與 cloud、alibaba-cloud 的版本對應

redis 默認配置調整

在 Springboot 2.x 的版本中,redis 的默認配置是 spring.redis.*,升級成 Springboot 3.x 以后,redis 的默認配置調整為了spring.data.redis.*。

若繼續(xù)使用 Springboot2.x 的 redis 配置,會導致獲取不到 redis 的配置。

SpringBoot 3.x 整合 Querydsl

主要問題:springboot 升級 3.0,jpa 包路徑從 javax 改成 jakarta,在默認情況下,無法生存 Q 類,也沒辦法使用JPAQuery

解決方法

  • 引入依賴。重點:classifier 標簽

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <classifier>jakarta</classifier>
        <version>5.0.0</version>
    </dependency>
    
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>5.0.0</version>
        <scope>provided</scope>
        <optional>true</optional>
        <classifier>jakarta</classifier>
    </dependency>
    
  • 引入 maven plugin

     <plugin>
        <groupId>com.mysema.maven</groupId>
        <artifactId>apt-maven-plugin</artifactId>
        <version>1.1.3</version>
        <executions>
            <execution>
    		<!--<goals>-->
    		<!--	<goal>process</goal>-->
    		<!--</goals>-->
                <configuration>
                    <outputDirectory>target/generated-sources</outputDirectory>
                    <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                </configuration>
            </execution>
        </executions>
    </plugin>
    
    

    注意:每個項目配置可能會有差別,在編譯時可能會報錯:Attempt to recreate a file for type xxx,導致此錯誤的情況也不太一致??赡艿脑蛑皇且驗榕渲昧?nbsp;goals,所以此處注釋掉 goals,其他情況不一定能適用此方式。

其他注意事項

  • 依賴循環(huán)引用 報錯

    如果升級前的 Spring Boot 版本早于 2.6.0,且存在 spring ioc 對象的循環(huán)引用,則需要添加允許循環(huán)引用的配置,否則報錯

    spring:
      main:
        allow-circular-references: true
    
  • WebMvcConfigurerAdapter.class 找不到報錯

    Spring Boot 3 基于 Spring Framework 6,而在 Spring Framework 5.3 中,WebMvcConfigurerAdapter 類已經被棄用,并在后續(xù)版本中移除。

    解決方案

    使用 WebMvcConfigurer 接口

    WebMvcConfigurerAdapter 是一個抽象適配器類,用于實現 WebMvcConfigurer 接口。

    在 Spring Framework 6 中,可以直接實現 WebMvcConfigurer 接口來定制 Web MVC 的行為。

    創(chuàng)建自定義配置類

    創(chuàng)建一個新的類,實現 WebMvcConfigurer 接口,并重寫需要的方法。

    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            // 自定義資源處理
        }
        @Override
        public void configurePathMatch(PathMatchConfigurer configurer) {
            // 自定義路徑匹配
        }
        // 其他需要的方法
    }
    
  • Spring Boot 3.x 支持優(yōu)雅退出,添加以下配置開啟

    # 打開優(yōu)雅退出
    server:
      shutdown: graceful
    # 多長時間后強制殺掉進程
    spring:
      lifecycle:
        timeout-per-shutdown-phase: 30s
    

maven 及 maven 插件的版本升級

maven 版本升級

為了確保 Maven 版本與 Java 17 兼容,應該使用一個較新的 Maven 版本。Java 17 是一個長期支持 (LTS) 版本,它是在 2021 年 9 月發(fā)布的。因此,應該使用 Maven 3.6.0 或更高版本來確保良好的兼容性。

以下是幾個推薦的 Maven 版本及其發(fā)布日期:

  • Maven 3.6.0 - 發(fā)布于 2019 年 2 月 10 日
  • Maven 3.6.3 - 發(fā)布于 2020 年 3 月 10 日
  • Maven 3.8.1 - 發(fā)布于 2021 年 2 月 18 日
  • Maven 3.8.5 - 發(fā)布于 2022 年 5 月 23 日

Maven 3.8.5 是一個較為推薦的版本,因為它包含了對 Java 17 的良好支持以及一些重要的安全修復和改進。

升級 Maven 版本

  • 查看當前 Maven 版本:

    打開終端或命令提示符,運行以下命令來查看已安裝的 Maven 版本:

    mvn --version
    

    如果還沒有安裝 Maven,或者安裝的版本較舊,可以按照下面的步驟安裝或升級。

  • 安裝或升級 Maven:

    • Windows 用戶:

      訪問 Apache Maven 官方下載頁面 下載最新的 Maven 版本。

      解壓下載的文件到一個目錄,例如 C:\apache-maven-3.8.5。

      將 Maven 的 bin 目錄添加到系統(tǒng)環(huán)境變量 PATH 中。

      設置 M2_HOME 環(huán)境變量,值為 Maven 的安裝目錄。

    • Linux/macOS 用戶:

      使用包管理器安裝 Maven,例如對于 Ubuntu/Debian 使用 apt-get,對于 macOS 使用 brew

      sudo apt update && sudo apt install maven
      

      或者使用 Homebrew:

      brew install maven
      

      或者從 Apache Maven 官網下載二進制分發(fā)包,解壓縮到 /usr/local 或其他位置,并通過 mvn --version 確認安裝成功。

  • 設置 Java 17 作為默認 JDK:

    • Windows 用戶:

      確保安裝了 Java 17,并將其路徑添加到環(huán)境變量 JAVA_HOME 中。

      設置 JAVA_HOME 環(huán)境變量指向 Java 17 的安裝目錄。

    • Linux/macOS 用戶:

      安裝 Java 17,例如使用 sdkman 或者直接從 Oracle 或 Adoptium 下載。

      設置 JAVA_HOME 環(huán)境變量指向 Java 17 的安裝目錄。

      確保 JAVA_HOME 和 PATH 環(huán)境變量被正確設置。

  • 驗證 Maven 和 Java 版本:

    再次運行 mvn --version 命令,確保顯示的 Java 版本為 17,并且 Maven 版本為 3.8.5 或更高。

  • 配置 Maven 以使用 Java 17:

    在 pom.xml 文件中指定 Java 17 編譯和源代碼版本,詳見 maven-compiler-plugin 版本升級

maven-compiler-plugin 版本升級

  • 為了確保 Maven 編譯插件 (maven-compiler-plugin) 與 Java 17 兼容并支持 Spring Boot 3 的需求,需要選擇一個合適的 maven-compiler-plugin 版本。

    截至2023年,maven-compiler-plugin 的最新穩(wěn)定版本是 3.10.1。該版本與 Java 17 兼容,并且適用于 Spring Boot 3。

  • 下面是 maven-compiler-plugin 的一個示例配置,用于確保使用 Java 17 進行編譯:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.10.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    這里的關鍵配置點包括:

    • <source> 和 <target> 都設置為 17,以指示使用 Java 17 進行編譯。
    • <version> 設置為 3.10.1,這是與 Java 17 兼容的一個版本。

    **請注意,需要根據實際的 Maven 和 Spring Boot 版本進行適當的調整。**如果需要使用特定版本的 maven-compiler-plugin,請查閱官方文檔或發(fā)布頁面以確認版本的兼容性。`

總結 

到此這篇關于關于JDK8升級17及springboot 2.x升級3.x的文章就介紹到這了,更多相關JDK8升級17及springboot2.x升級3.x內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java把數字格式化為貨幣字符串實例代碼

    Java把數字格式化為貨幣字符串實例代碼

    這篇文章主要介紹了Java把數字格式化為貨幣字符串實例代碼,需要的朋友可以參考下
    2014-02-02
  • 淺談java運用注解實現對類中的方法檢測的工具

    淺談java運用注解實現對類中的方法檢測的工具

    這篇文章主要介紹了淺談java運用注解實現對類中的方法檢測的工具,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Spring?IOC容器的Bean管理基于注解屬性注入方式

    Spring?IOC容器的Bean管理基于注解屬性注入方式

    這篇文章主要為大家介紹了Spring?IOC容器的Bean管理基于注解屬性注入方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • java UUID&雪花算法生成和使用場景詳解

    java UUID&雪花算法生成和使用場景詳解

    UUID和雪花算法都是用于生成唯一標識符的有效工具,它們各有優(yōu)勢:UUID簡單易用,但長度較長,適用于分布式系統(tǒng);雪花算法生成的ID較短且有序,適用于需要保證順序的場景,在選擇算法時,需要考慮系統(tǒng)架構、性能需求和順序需求等因素
    2025-01-01
  • Java 通過mave命令下載jar包的示例代碼

    Java 通過mave命令下載jar包的示例代碼

    這篇文章主要介紹了Java 通過mave命令下載jar的示例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • java開發(fā)ServiceLoader實現機制及SPI應用

    java開發(fā)ServiceLoader實現機制及SPI應用

    這篇文章主要為大家介紹了java開發(fā)ServiceLoader實現機制及SPI應用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 基于OAuth2.0授權系統(tǒng)的驗證碼功能的實現

    基于OAuth2.0授權系統(tǒng)的驗證碼功能的實現

    本篇教程給大家分享基于OAuth2.0授權系統(tǒng)的驗證碼功能的實現,驗證碼功能的實現是采用Zuul網關的Filter過濾器進行校驗驗證碼,具體實現代碼跟隨小編一起看看吧
    2021-05-05
  • IDEA?隱藏DEBUG日志的解決方法

    IDEA?隱藏DEBUG日志的解決方法

    IDEA?打印太多的DEBUG日志,看起來很煩,有沒有辦法隱藏日志,網上找了一圈,沒有誰寫的靠譜的,下面小編給大家分享下IDEA?如何隱藏DEBUG日志,需要的朋友可以參考下
    2022-09-09
  • xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下
    2017-04-04
  • Java數組添加元素的兩種方法

    Java數組添加元素的兩種方法

    這篇文章主要介紹了Java數組添加元素的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友跟著小編來一起學習學習吧
    2023-04-04

最新評論