JDK 8 升级 17 及 springboot 2.x 升级 3.x 指南

文章目录

  • JDK 8 升级 17
    • 简介
    • javax.* 包移到 jakarta.*
    • maven pom 中更新 java 版本
  • springboot 2.x 升级 3.x
    • spring-boot 与 cloud、alibaba-cloud 的版本对应
    • redis 默认配置调整
    • SpringBoot 3.x 整合 Querydsl
    • 其他注意事项
  • maven 及 maven 插件的版本升级
    • maven 版本升级
    • maven-compiler-plugin 版本升级

JDK 8 升级 17

简介

从 JDK 8 升级到 JDK 17 的过程中,有几个主要的变化,特别是 Java Platform Module System (JPMS) 的引入,以及一些包路径的调整。以下是与 JDK 17 相关的一些重要变化:

  • Java Platform Module System (JPMS)

    • 模块化:JDK 9 引入了模块系统,将标准 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 转变为 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 的版本对应

  • spring-cloud 与 spring-boot 的版本对应详见 spring-cloud 官方文档

    在这里插入图片描述

  • spring-alibaba-cloud 与 spring-cloud、spring-boot 的版本对应详见 spring-alibaba-cloud 官方文档

    在这里插入图片描述


redis 默认配置调整

在 Springboot 2.x 的版本中,redis 的默认配置是 spring.redis.*,升级成 Springboot 3.x 以后,redis 的默认配置调整为了spring.data.redis.*

若继续使用 Springboot2.x 的 redis 配置,会导致获取不到 redis 的配置。


SpringBoot 3.x 整合 Querydsl

主要问题:springboot 升级 3.0,jpa 包路径从 javax 改成 jakarta,在默认情况下,无法生存 Q 类,也没办法使用JPAQuery

解决方法

  1. 引入依赖。重点: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>
    
  2. 引入 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,导致此错误的情况也不太一致。可能的原因之一是因为配置了 goals,所以此处注释掉 goals,其他情况不一定能适用此方式。


其他注意事项

  • 依赖循环引用 报错

    如果升级前的 Spring Boot 版本早于 2.6.0,且存在 spring ioc 对象的循环引用,则需要添加允许循环引用的配置,否则报错

    spring:main:allow-circular-references: true
    
  • WebMvcConfigurerAdapter.class 找不到报错

    Spring Boot 3 基于 Spring Framework 6,而在 Spring Framework 5.3 中,WebMvcConfigurerAdapter 类已经被弃用,并在后续版本中移除。

    解决方案

    1. 使用 WebMvcConfigurer 接口

      WebMvcConfigurerAdapter 是一个抽象适配器类,用于实现 WebMvcConfigurer 接口。

      在 Spring Framework 6 中,可以直接实现 WebMvcConfigurer 接口来定制 Web MVC 的行为。

    2. 创建自定义配置类

      创建一个新的类,实现 WebMvcConfigurer 接口,并重写需要的方法。

      @Configuration
      public class WebConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 自定义资源处理}@Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {// 自定义路径匹配}// 其他需要的方法
      }
      
  • Spring Boot 3.x 支持优雅退出,添加以下配置开启

    # 打开优雅退出
    server:shutdown: graceful
    # 多长时间后强制杀掉进程
    spring:lifecycle:timeout-per-shutdown-phase: 30s
    

maven 及 maven 插件的版本升级

maven 版本升级

为了确保 Maven 版本与 Java 17 兼容,应该使用一个较新的 Maven 版本。Java 17 是一个长期支持 (LTS) 版本,它是在 2021 年 9 月发布的。因此,应该使用 Maven 3.6.0 或更高版本来确保良好的兼容性。

以下是几个推荐的 Maven 版本及其发布日期:

  • Maven 3.6.0 - 发布于 2019 年 2 月 10 日
  • Maven 3.6.3 - 发布于 2020 年 3 月 10 日
  • Maven 3.8.1 - 发布于 2021 年 2 月 18 日
  • Maven 3.8.5 - 发布于 2022 年 5 月 23 日

Maven 3.8.5 是一个较为推荐的版本,因为它包含了对 Java 17 的良好支持以及一些重要的安全修复和改进。


升级 Maven 版本

  1. 查看当前 Maven 版本:

    打开终端或命令提示符,运行以下命令来查看已安装的 Maven 版本:

    mvn --version
    

    如果还没有安装 Maven,或者安装的版本较旧,可以按照下面的步骤安装或升级。

  2. 安装或升级 Maven:

    • Windows 用户:

      1. 访问 Apache Maven 官方下载页面 下载最新的 Maven 版本。
      2. 解压下载的文件到一个目录,例如 C:\apache-maven-3.8.5
      3. 将 Maven 的 bin 目录添加到系统环境变量 PATH 中。
      4. 设置 M2_HOME 环境变量,值为 Maven 的安装目录。
    • Linux/macOS 用户:

      1. 使用包管理器安装 Maven,例如对于 Ubuntu/Debian 使用 apt-get,对于 macOS 使用 brew

        sudo apt update && sudo apt install maven
        

        或者使用 Homebrew:

        brew install maven
        
      2. 或者从 Apache Maven 官网下载二进制分发包,解压缩到 /usr/local 或其他位置,并通过 mvn --version 确认安装成功。

  3. 设置 Java 17 作为默认 JDK:

    • Windows 用户:
      1. 确保安装了 Java 17,并将其路径添加到环境变量 JAVA_HOME 中。
      2. 设置 JAVA_HOME 环境变量指向 Java 17 的安装目录。
    • Linux/macOS 用户:
      1. 安装 Java 17,例如使用 sdkman 或者直接从 Oracle 或 Adoptium 下载。
      2. 设置 JAVA_HOME 环境变量指向 Java 17 的安装目录。
      3. 确保 JAVA_HOMEPATH 环境变量被正确设置。
  4. 验证 Maven 和 Java 版本:

    再次运行 mvn --version 命令,确保显示的 Java 版本为 17,并且 Maven 版本为 3.8.5 或更高。

  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 的最新稳定版本是 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,请查阅官方文档或发布页面以确认版本的兼容性。`

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419228.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HUAWEI华为MateBook B5-420 i5 集显(KLCZ-WXX9,KLCZ-WDH9)原装出厂Windows10系统文件下载

适用型号&#xff1a;KLCZ-WXX9、KLCZ-WDH9 链接&#xff1a;https://pan.baidu.com/s/12xnaLtcPjZoyfCcJUHynVQ?pwdelul 提取码&#xff1a;elul 华为原装系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、华为浏览器、Office办公软件、华为…

握 手 问 题

目录 一&#xff1a;问题描述 二&#xff1a;思路: 三&#xff1a;代码&#xff1a; 四&#xff1a;结果&#xff1a;1204 一&#xff1a;问题描述 小蓝组织了一场算法交流会议&#xff0c;总共有50 5050 人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照…

C++解决:求排列数

描述 输入两个整数m,n&#xff0c;求m个数字中选n个数的排列数。&#xff08;1<n<m<50&#xff09; 输入描述 两个正整数m和n。 输出描述 一个正整数表示排列数。 用例输入 1 6 5 用例输出 1 720 AC code #include<bits/stdc.h> using namespace s…

Avatar 高清图传

Avatar HD VTX 是一款数字视频发射器&#xff0c;专为与 Caddx/Walksnail 的 Avatar HD 系统配合使用而设计。最初以 Walksnail 品牌销售&#xff0c;实际上是 CaddX FPV 的一部分。 这些 VTX 设计用于 Caddx/Walksnail 的 Avatar HD 系统&#xff0c;并可与 Avatar HD Goggle…

【OpenWrt(3)】内网搭建iperf3测速服务器

下载的iperf3 网站&#xff1a;https://iperf.fr/iperf-download.php Window地址&#xff1a;https://github.com/ar51an/iperf3-win-builds 安卓&#xff1a;https://gitee.com/hiyanyx/magic-i-perf 文章目录 下载的iperf3Windows 服务器启动安卓客户端启动参考 Windows 服务…

利士策分享,如何规划多彩的大学生活?

利士策分享&#xff0c;学习规划多彩的大学生活 踏入大学&#xff0c;如同开启一场充满未知与可能的旅程。 为了让这段旅程不仅充满学术的熏陶&#xff0c;还洋溢着生活的多彩与人际的和谐&#xff0c;我们需要精心规划&#xff0c;积极行动。 一、多彩规划&#xff1a;点亮大学…

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 知识点 1. 散列查找 散列查找是一种高效的查找方法&#xff0c;它通过散列函数将关键字映射到数组的一个位置&#xff0c;从而实现快速查找。这种方法的时间复杂度平均为…

【小沐学OpenGL】Ubuntu环境下glut的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glut简介1.3 freeglut 2、glut安装2.1 命令安装glut2.2 源码安装glut 3、glut测试3.1 测试1&#xff0c;版本打印3.2 测试2&#xff0c;绘制三角形3.3 测试3&#xff0c;VBO绘制三角形 结语 1、简介 1.1 OpenGL简介 OpenGL作为图形界的工业…

2024最新!Facebook手机版和网页版改名教程!

Facebook作为全球最大的社交平台之一&#xff0c;允许用户自定义名字和昵称。在Facebook更新姓名可以帮助您更好的展现账号形象。本文将为您提供详细的步骤指导&#xff0c;帮助您在手机APP和网页版上轻松完成Facebook改名操作。 Facebook手机版改名 打开Facebook APP并登录账号…

构建模块化的FastAPI应用: 从用户认证到角色控制

实现了用户身份验证及角色授权的基本功能。具体来说&#xff0c;当用户尝试访问某些资源时&#xff0c;系统会首先验证用户的身份&#xff0c;然后根据用户的角色来决定是否允许访问特定资源。例如&#xff0c;普通用户只能访问自己的信息&#xff0c;而管理员可以访问额外的管…

UnLua调用C++函数

一、UnLua调用C全局静态函数 1、新建C类MyLuaUtils&#xff0c;继承BlueprintFunctionLibrary,实现全局静态函数GetInt。 MyLuaUtils.h UCLASS() class LUASHOOTING_API UMyLuaUtils : public UBlueprintFunctionLibrary {GENERATED_BODY()UFUNCTION(BlueprintCallable)static…

Python 神器:wxauto 库——解锁微信自动化的无限可能

&#x1f4dd;个人主页&#x1f339;&#xff1a;誓则盟约 ⏩收录专栏⏪&#xff1a;机器学习 &#x1f921;往期回顾&#x1f921;&#xff1a;“探索机器学习的多面世界&#xff1a;从理论到应用与未来展望” &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f…

GPIO 简介(STM32F407)

一、GPIO简介 什么是GPIO GPIO即通用输入输出端口&#xff0c;全称General Purpose Input Output&#xff0c;是控制或者采集外部器件的信息的外设&#xff0c;即负责输入输出。 它按组分配存在&#xff0c;每组最多16个IO口&#xff0c;组数视芯片而定。比如STM32F407ZGT6是…

【Python】Python 读取Excel、DataFrame对比并选出差异数据,重新写入Excel

背景&#xff1a;我在2个系统下载出了两个Excel&#xff0c;现在通过对下载的2个Excel数据&#xff0c;并选出差异数据 从新写入一个新的Excel中 differences_url rC:\Users\LENOVO\Downloads\differences.xlsx; //要生成的差异Excel的位置及名称 df1_url rC:\Users\LENOVO\Dow…

大数据新视界--大数据大厂之Java 与大数据携手:打造高效实时日志分析系统的奥秘

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Spring源码(3)Aware接口、初始化和销毁方法、@Scope、@Primary

1、目标 本文的主要目标是学习Spring源码中Aware接口、初始化和销毁方法、Scope注解、Primary注解的使用 2、Aware接口 Component public class MyBeanAware implements BeanNameAware, ApplicationContextAware {Overridepublic void setBeanName(String name) {System.out…

从JavaScript入门Go三

前情提要 上一章中我们讲了Go中的变量与函数&#xff0c;这一节我们说说Go中的逻辑语法for、if、switch。最近正好有空&#xff0c;正好给大家更新一下入门的第三章。 PS&#xff1a;没看过的第一章、第二章的小伙伴&#xff0c;可以进入下面的链接查看 从JavaScript入门Go一 从…

计算机毕业设计 | vue+springboot在线投稿管理 稿件文章报社管理系统 (附源码)

1&#xff0c;绪论 1.1 行业趋势与需求 随着互联网的发展和普及&#xff0c;越来越多的出版社、杂志社和媒体开始采用在线投稿系统。这种系统提供了一个便捷的平台&#xff0c;让作者可以直接将他们的文章提交到相应的出版机构&#xff0c;而无需邮寄或亲自递交稿件。这不仅节…

Web服务器配置管理

目录 一、设计内容&#xff1a; 二、摘 要 三、课题描述 四、需求分析 五、概要设计 六、详细设计 七、结果分析 八、总结 一、设计内容 Web服务器的安装与配置管理。 1.任务说明 C/S 模式的网络环境&#xff0c;包括一台Windows工作站和一台Windows Server 服务器。 2.要求 ①…

图论(2)

一、度 度统计的是一个节点上又多少条边 度出度入度 出度&#xff1a;统计以该节点为起始点箭头指向外面的边的条数 入度&#xff1a;统计箭头指向该节点的边数 度为1的节点为悬挂节点&#xff0c;边为悬挂边 用矩阵计算节点的度 二、握手定理 比如这里第一个集合里面有三…