SpringbootWeb应用Java8升级到Java17全过程记录
简介
Java17是java最近一个长期支持的版本,而且免费,连老詹(Java之父詹姆斯·高斯林)都推荐使用Java17,传说17版本是有史以来最快的版本,马上提高了兴趣,决定先把个人的web应用升级一下,先把坑趟一下,没问题了再升级企业应用。本次升级主要是基于Java8+springboot2.3.x的web应用程序,要升级java版本,还需要升级springboot的版本至最新版2.7.5,话不多说,直接开干(个人项目较简单,不涉及太多JVM启动参数,这里不便讨论)。
开发环境:
Java:1.8.0_181 -> 17.0.5
Springboot:2.3.12.RELEASE -> 2.7.5
IDE:Spring的STS4.16.1。
一、调整项目java版本,升级pom文件springboot的版本
1、“The package javax.xml.parsers is accessible from more than one module:
在STS中按ctrl+shift+T,输入报错的类名,如SAXParser,就会出现含有对应依赖的jar包,把这个jar包从maven中exclude掉即可。
去掉有冲突的依赖,编译问题搞定,执行也没有问题。
2、对整个项目做一个依赖分析
jdeps --jdk-internals --multi-release 17 --class-path . mystery-3.0.0.jar
本地项目没有找到依赖,如果有的话,要检查是否有废弃的api接口,如果有就要对其进行升级操作。
3、启动应用程序,一步步排查异常:
(1)出现spring bean循环注入异常:
The dependencies of some of the beans in the application context form a cycle:
┌──->──┐
| com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration
└──<-──┘
Action:
Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.
高版本的springboot默认不允许bean的循环注入,因此需要在application配置文件中加入开启功能:
spring:
main:
allow-circular-references: true #允许bean循环注入
(2)出现Quartz定时任务启动异常
经查阅,这个异常是在springboot2.5.7之后引入的,解决方案就是不配置org.quartz.jobStore.class,系统默认使用org.springframework.scheduling.quartz.LocalDataSourceJobStore。
以上问题处理完毕后,启动应用程序,无异常,待后续运行看是否稳定。
标题:SpringbootWeb应用Java8升级到Java17全过程记录
作者:michael
地址:https://blog.junxworks.cn/articles/2022/11/14/1668397340791.html