项目升级到jdk21后 SpringBoot相关组件的适配
赶路人儿 2024-06-15 10:35:02 阅读 81
了解到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:通用正式发布版本,同releaseSNAPSHOT:快照版本,可用但非稳定版本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注解的报名发生了变化。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。