项目升级到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.112port: 6379database: 0password: xxxtimeout: 800lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: -1

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

spring:data:redis:host: 9.218.74.102port: 6379database: 0password: ${redisPassword}timeout: 800lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-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注解的报名发生了变化。

 

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

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

相关文章

【简单讲解下npm常用命令】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

瞬态瑞丽波频散曲线提取

频散曲线 function [Y1, f, phase] = das_fft(signal1, signal2, Ts) [y, lag

视频自定义字幕,中英文,彩色的,你也可以,不会不知道吧

前言 关于【SSD系列】&#xff1a; 前端一些有意思的内容&#xff0c;旨在3-10分钟里&#xff0c;有所获&#xff0c;又不为所累。 字幕&#xff0c;大家见过吧&#xff0c;其实你也可以&#xff0c;真的可以&#xff0c;真的真的可以。不难&#xff0c;不难&#xff0c;真的…

`Spring Cloud OpenFeign`底层实现原理

Spring Cloud OpenFeign工作原理 一 、简介 OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解&#xff0c;如RequesMapping等等。 OpenFeign的FeignClient可以解析SpringMVC的RequestMapping注解下的接口&#xff0c;并通过动态代理的方式产生实现类&#xff…

数据结构OJ:设计循环队列

题目介绍 本题为LeetCode上的经典题目&#xff0c;题目要求我们设计一种循环队列&#xff0c;满足FIFO原则且队尾被连接在队首之后。 思路讲解 题目中介绍循环队列的好处是可以重复利用空间&#xff0c;所以我们很容易想到在初始化时即开辟指定大小的空间&#xff0c;之后便不…

嵌入式4-16

tftpd #include <myhead.h> #define SER_IP "192.168.125.243" //服务器IP地址 #define SER_PORT 69 //服务器端口号 #define CLI_IP "192.168.125.244" //客户端IP地址 #define CLI_PORT 8889 //客户端端…

解决 MSYS2 Qt 6.7 默认 stylesheet 在 windows 11 下的显示故障

项目场景&#xff1a; MSYS2 升级到 Qt6.7.0&#xff0c;发现显示故障&#xff0c;所有Qt6程序以及 QtCreator的SpinBox都显示不全&#xff0c;Combox的底色不对。 问题描述 2024年4月1日&#xff0c;pacman升级MSYS2后&#xff0c;Qt6遇到风格错误。如果使用官方的 Qt onlin…

飞腾UEFI电源控制选择代码解析

飞腾UEFI电源控制选择代码解析 CPLD 处理方式EC 处理方式注:本文以飞腾UEFI edk-code-4.2.0版本进行说明,如果有朋友需要借鉴,请使用该版本代码。 以D2000打工工具为例,下图打包工具中有选择主板电源管理方式,这里可以选择CPLD、EC、和SE,其中SE代表为X100控制上下电时序…

Spring Cloud 集成 Redis 发布订阅

目录 前言步骤引入相关maven依赖添加相关配置 使用方法发布订阅发布一个消息 注意总结 前言 在当今的软件开发领域&#xff0c;分布式系统已经成为一种主流的架构模式&#xff0c;尤其是在处理大规模、高并发、高可用的业务场景时。然而&#xff0c;随着系统复杂性的增加&…

GitHub提交PR

本教程只做开源代码库Github工程提交pr的教程&#xff0c;不做其他的深入的讲解 Github和Gitlab的操作类似&#xff0c;只不过Github叫PR&#xff0c;GitLab叫MR&#xff0c;基本上做法是一致的 以开源项目QuickChat为例 https://github.com/Binx98/QuickChat https://github…

移动硬盘盒支持PD充电:优势解析与实际应用探讨

随着科技的飞速发展&#xff0c;数据存储和传输的需求日益增长&#xff0c;移动硬盘盒作为便携式存储设备的重要载体&#xff0c;其功能和性能也在不断提升。近年来&#xff0c;越来越多的移动硬盘盒开始支持PD&#xff08;Power Delivery&#xff09;充电技术&#xff0c;这一…

5种方法,教你如何清理接口测试后的测试数据

在接口测试之后&#xff0c;清理测试数据是一个很重要的步骤&#xff0c;以确保下一次测试的准确性和一致性。以下是一些常见的测试数据清理方法&#xff1a; 1. 手动清理&#xff1a; 这是最基本的方法&#xff0c;即手动删除或重置测试数据。您可以通过访问数据库、控制台或…