项目升级到jdk21后 SpringBoot相关组件的适配

了解到jdk21是一个LTS版本,可以稳定支持协程的功能。经过调研,将目前线上的jdk8升级到21,使用协程提升并发性能。

目前系统使用springBoot 2.0.3.RELEASE,并且引入了mybatis-spring-boot-starter、spring-boot-starter-data-redis、jasypt-spring-boot-starter。记录一下升级过程中遇到的问题和解决方法。

1、springboot版本的选择:

从Spring Boot官网可以查到,目前release版本时3.2.4

  • CURRENT:代表了当前版本,最新发布版本,里程碑版本
  • GA:通用正式发布版本,同release
  • SNAPSHOT:快照版本,可用但非稳定版本
  • PRE:预览版本
  • RC:(Release Candidate) 软件选版本。系统平台上的发行候选版本。RC版不会再加入新的功能了,主要着重于除错
  • Alpha:测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出。
  • Beta:测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出。 

点击Reference Doc.,进入新页面点击Getting Started,然后在点击Installing Spring Boot

可以看到该版本的springboot支持jdk17以上。

SpringBoot和JDK版本兼容问题,在spring官网、spring-boot项目的github地址都没有找到一个统一的总结,在网上无意间找到一个文章,总结如下:

SpringBoot Version

JDK Version

来源

0.0 -1.1

6+(6 or higher)

9. Installing Spring Boot

Spring Boot can be used with “classic” Java development tools or installed as a command line tool. Regardless, you will need Java SDK v1.6 or higher.

9. Installing Spring Boot

Spring Boot can be used with “classic” Java development tools or installed as a command line tool. Regardless, you will need Java SDK v1.6 or higher.

9. Installing Spring Boot

Spring Boot can be used with “classic” Java development tools or installed as a command line tool. Regardless, you will need Java SDK v1.6 or higher.

1.2 - 1.5

6 - 7

9. System Requirements

By default, Spring Boot 1.2.8.RELEASE requires Java 7 and Spring Framework 4.1.5 or above. You can use Spring Boot with Java 6 with some additional configuration.

9. System Requirements

By default, Spring Boot 1.3.8.RELEASE requires Java 7 and Spring Framework 4.2.8.RELEASE or above. You can use Spring Boot with Java 6 with some additional configuration.

9. System Requirements

By default, Spring Boot 1.4.7.RELEASE requires Java 7 and Spring Framework 4.3.9.RELEASE or above. You can use Spring Boot with Java 6 with some additional configuration.

9. System Requirements

By default, Spring Boot 1.5.22.RELEASE requires Java 7 and Spring Framework 4.3.25.RELEASE or above. You can use Spring Boot with Java 6 with some additional configuration.

2.0

8 - 9

9. System Requirements

Spring Boot 2.0.9.RELEASE requires Java 8 or 9 and Spring Framework 5.0.13.RELEASE or above.

2.1

8 - 12

10. System Requirements

Spring Boot 2.1.18.RELEASE requires Java 8 and is compatible up to Java 12 (included).

2.2 - 2.3

8 - 15

Getting Started

Spring Boot 2.2.13.RELEASE requires Java 8 and is compatible up to Java 15 (included).

Getting Started

Spring Boot 2.3.12.RELEASE requires Java 8 and is compatible up to Java 15 (included).

2.4

8 - 16

Getting Started

Spring Boot 2.4.13 requires Java 8 and is compatible up to Java 16 (included).

2.5

8 - 18

Getting Started

Spring Boot 2.5.15 requires Java 8 and is compatible up to and including Java 18.

2.6

8 - 19

Getting Started

Spring Boot 2.6.15 requires Java 8 and is compatible up to and including Java 19.

2.7

8 - 21

Getting Started

Spring Boot 2.7.18 requires Java 8 and is compatible up to and including Java 21.

3.0 - 3.2

17 - 21

Getting Started

Spring Boot 3.0.13 requires Java 17 and is compatible up to and including Java 21.

Getting Started

Spring Boot 3.1.6 requires Java 17 and is compatible up to and including Java 21.

Getting Started

Spring Boot 3.2.0 requires Java 17 and is compatible up to and including Java 21.

2、pom文件

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.1.10</version>
    <relativePath/>
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
    <maven.compiler.compilerVersion>21</maven.compiler.compilerVersion>
    <java.version>21</java.version>
    <skipTests>true</skipTests>
</properties>

3、遇到的一些问题:

 3.1)lombok:

如果项目中使用了lombok组建,可能会遇到如下错误:

java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'

这是因为此版本并不支持jdk21,需要升级到1.18.30 

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>

3.2) spring-boot-starter-data-redis报错:
启动系统,报错无法链接到redis,经过排查发现是高版本spring-boot-starter-redis的配置做了修改。2.0.3.RELEASE的spring-boot-starter-data-redis配置如下:

spring:
  redis:
    host: 9.218.74.112
    port: 6379
    database: 0
    password: xxx
    timeout: 800
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: -1

3.1.10版本的如下:(多了一层data)

spring:
  data:
    redis:
       host: 9.218.74.102
       port: 6379
       database: 0
       password: ${redisPassword}
       timeout: 800
       lettuce:
         pool:
           max-active: 8
           max-idle: 8
           min-idle: 0
           max-wait: -1

3.3)mybatis-spring-boot-starter报错:

错误是提示没有在spring-core中找到NestedIOException这个类,查了下,在spring-core 5.3.x版本已经废弃了NestedIOException这个类,在springboot3中使用了spring6。解决方法,升级到3.0.2

<dependency>
	 <groupId>org.mybatis.spring.boot</groupId>
	 <artifactId>mybatis-spring-boot-starter</artifactId>
	 <version>3.0.2</version>
</dependency>

 3.4)javax 变成了 jakarta导致报名错误:

javax 变成了 jakarta,包括HttpServletRequest类、@PostConstruct注解的报名发生了变化。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电商技术揭秘22:智能仓储与物流优化(上)

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台…

Hot100【十一】: 347. 前 K 个高频元素

class Solution {public int[] topKFrequent(int[] nums, int k) {// 1.建立hash表来存储每个元素以及它的频率HashMap<Integer, Integer> num2Fre new HashMap<Integer, Integer>();for (int num : nums) {num2Fre.put(num, num2Fre.getOrDefault(num, 0) 1);}/…

白盒测试-基本路径覆盖

​ 路径覆盖可以使程序中的路径都被测试到&#xff0c;但是&#xff0c;要对程序中的路径做到完全覆盖经常是无法实现的。为了解决这一难题&#xff0c;我们需要在保证测试质量的前提下把测试的路径数量压缩到一定的范围内 ​ 基本路径覆盖法是在程序控制流图的基础上&#xf…

基于ADB的Scrcpy实现电脑控制手机

Scrcpy是一个开源的&#xff0c;基于ADB&#xff08;Android 调试桥&#xff09;的手机到电脑上的投屏操控的实现&#xff0c;本文将介绍如何搭建开发环境&#xff0c;使得在Windows系统中去控制投屏的安卓手机。 1. 安装投屏软件 下载Scrcpy软件到电脑上&#xff0c;该软件中…

JVM主要知识点详解

目录 1. 性能监控和调优 1.1 调优相关参数 1.2 内存泄漏排查 1.3 cpu飙⾼ 2. 内存与垃圾回收 2.1JVM的组成&#xff08;面试题&#xff09; 2.2 Java虚拟机栈的组成 2.3 本地方法栈 2.4 堆 2.5 方法区&#xff08;抽象概念&#xff09; 2.5.1 方法区和永久代以及元空…

【vue】Pinia-2 安装Pinia,使用store

1. 安装Pinia 在项目路径下执行npm install pinia 在package.json中查看 2. 使用store 在main.js中添加 import { createPinia } from pinia const pinia createPinia()修改createApp方法 最后示例如下&#xff08;三处修改&#xff09; import { createApp } from vue //…

基于Docker构建CI/CD工具链(七)使用Jmeter进行自动化压测

上一篇文章中&#xff0c;我们详细介绍了构建 Apifox Cli 的 Docker 镜像的步骤&#xff0c;并通过简单的示例演示了如何利用 GitLab 的 CI/CD 功能&#xff0c;将构建好的镜像利用在自动化测试作业中。在今天的文章中&#xff0c;我们将重点讨论如何构建 JMeter 的 Docker 镜像…

【高通平台】如何升级蓝牙的firmware

1. 您可以使用以下命令升级固件 adb push apbtfw11.tlv /bt_firmware/image/ adb push apnv11.bin /bt_firmware/image/ adb shell sync 或者 adb push crbtfw21.tlv /vendor/bt_firmware/image adb push crnv21.bin /vendor/bt_firmware/image adb shell sync 查看代码路径…

项目5-博客系统3+接口完

1.实现显示用户信息 ⽬前⻚⾯的⽤⼾信息部分是写死的. 形如 我们期望这个信息可以随着用户登陆而发生改变. • 如果当前⻚⾯是博客列表⻚, 则显⽰当前登陆⽤⼾的信息. • 如果当前⻚⾯是博客详情⻚, 则显⽰该博客的作者⽤⼾信息. 注意: 当前我们只是实现了显⽰⽤⼾名, 没有…

Linux学习(1)

参考学习韩顺平老师 第一章&#xff1a;LINUX 开山篇-内容介绍 1.2.Linux 使用在那些地方 linux运营工程师主要做&#xff1a; 服务器规划 调试优化 对系统进行日常监控 故障处理 对数据的备份和处理 日志的分析 1.3.Linux 的应用领域 1.个人桌面领域的应用 …

短视频底层逻辑分析

短视频底层逻辑 1.迭代模型_ev 2.Douyin的本质_ev 3.Douyin的审核机制_ev 4.平台趋势_ev 5.定位_ev 6.建立用户期待_ev 7.好内容的定义_ev 8怎么做好内容_ev 9.如何做好选题_ev 10.如何快速模仿_ev 11.账号拆解的底层逻辑_ev 12选人的重要性_ev 13.内容的包装_ev 14.打造大IP的…

easyexcel升级3.3.4失败的经历

原本想通过easyexcel从2.2.6升级到3.3.3解决一部分问题&#xff0c;结果之前的可以用的代码&#xff0c;却无端的出现bug 1 Sheet index (1) is out of range (0…0) 什么都没有改&#xff0c;就出了问题&#xff0c;那么问题肯定出现在easyexcel版本自身.使用模板填充的方式进…

Innodb之redo日志

Innodb引擎执行流程 redo log ​ MySQL中的redo log&#xff08;重做日志&#xff09;是实现WAL&#xff08;预写式日志&#xff09;技术的关键组件&#xff0c;用于确保事务的持久性和数据库的crash-safe能力。借用《孔乙己》中酒店掌柜使用粉板记录赊账的故事&#xff0c;…

Flask前端页面文本框展示后端变量,路由函数内外两类

一、外&#xff01;路由函数外的前后端数据传输 Flask后端 ↓ 首先导入包&#xff0c;需要使用 后端&#xff1a;flask_socketio来进行路由外的数据传输&#xff0c; from flask_socketio import SocketIO, emit 前端&#xff1a;还有HTML头文件的设置。 <!DOCTYPE …

【云原生数据库:原理与实践】1- 数据库发展历程

1-数据库发展历程 1.1 数据库发展概述 从1960年&#xff1a;Integrated Database System&#xff08;IDS&#xff09;&#xff0c;该系统是一个网状模型&#xff08;Network Model&#xff09;到 IMS&#xff08;Information Management System&#xff09;&#xff0c;使用了…

Rust腐蚀服务器清档多教程

Rust腐蚀服务器清档多教程 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师。上期教了大家怎么搭建服务器以及安装插件等那么随着大家自己架设服或是玩耍的时间肯定会有小伙伴想要去新增开区数量或是把原本的服务器进行一些调整等&#xff0c;那么今天主要聊的就是怎…

【智能算法】鸭群算法(DSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年&#xff0c;Zhang等人受到自然界鸭群觅食行为启发&#xff0c;提出了鸭群算法&#xff08;Duck Swarm Algorithm, DSA&#xff09;。 2.算法原理 2.1算法思想 DSA基于自然界鸭群觅食过程&…

[leetcode] max-area-of-island

. - 力扣&#xff08;LeetCode&#xff09; 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&…

基于SpringBoot+Vue的共享汽车管理系统(源码+文档+包运行)

一.系统概述 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了共享汽车管理系统的开发全过程。通过分析共享汽车管理系统管理的不足&#xff0c;创建了一个计算机管理共享汽车管理系统的方案。文章介绍了共享汽车管理…

从 MySQL 到 DynamoDB,Canva 如何应对每天新增的 5000 万素材

作为一款设计工具&#xff0c;Canva 吸引人的一个重要特色就是拥有数以亿计的照片和图形资源&#xff0c;支持用户上传个人素材。 Canva 于 2013 年推出&#xff0c;设立了一个包含大量照片和图形的资源库&#xff0c;并允许用户上传自己的素材以用于设计。从发布之日起&#…