目录
- 前言
- 历程
前言
Spring Boot 3.0.0 GA版已经发布,好多人也开始尝试升级,有人测试升级后,启动速度确实快了不少,如下为网络截图,于是我也按捺不住的想尝试下。
历程
首先就是要把Spring Boot、Spring Cloud 相关的依赖升一下
Spring Boot:3.0.0Spring Cloud:2022.0.0-RC2统一依赖版本管理:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloudjavascript-dependencies</artifactId> <version>2022.0.0-RC2</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
现在还不能下载Spring 相关依赖包,需要加入Spring 仓库。
在你的maven仓库中加入如下配置,我是加在了pom.XML
中
<repository> <id>netflix-candidates</id> <name>Netflix Candidates</name> <url>https://artifactory-oss.prod.netflix.net/artifactory/maven-oss-candidates</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository>
另外Spring Boot 3.X 开始使用了Java 17,将java版本调整到>17,为了不必要的麻烦,就选17
IDEA选择17,并在pom.xml文件中指定版本:
<java.version>17</java.version>
到这里我们的common 包是能正常编译了。
接下来是服务的配置
同样调整Spring Boot、Spring Cloud、Java的版本,同common的配置。碰到如下的几个问题:找不到hystrix的依赖问题
:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> <version>2.2.9.RELEASE</version> </dependency>
rabbitmq问题
:
TypeVariableImpl丢失问题
:
sun.reflect.generics.reflectiveObjects.TypeVariableImpl
,现在17中已经被隐藏无法直接使用,这边为了能够先启动,暂时注释,后面再想办法。
Log 异常问题
:
log4j
,也有用logback
,升级后已经不行,提示冲突,报错如下
Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.helpers.NOPLoggerFactory loaded from file:/Users/chphpenjujun/.m2/repository/org/slf4j/slf4j-api/1.7.0/slf4j-api-1http://www.devze.com.7.0.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.helpers.NOPLoggerFactory
at org.springframework.util.Assert.instanceCheckFailed(Assert.java:713) at org.spri开发者_Js入门ngframework.util.Assert.isInstanceOf(Assert.java:632)
意思是,要么移除Logback,要么解决slf4j-api的冲突依赖,这里两种方式都尝试了,slf4j-api依赖的地方太多,后面移除了Logback。
要排除依赖一个好办法:使用Maven Helper
插件
logback依赖:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.8</version> </dependency>
Apollo问题
:
--add-opens java.base/java.lang=ALL-UNNAMED
Caused by: com.ctrip.framework.apollo.exceptions.ApolloConfigException: Unable to load instance for com.ctrip.framework.apollo.spring.config.ConfigPropertySourceFactory!
at com.ctrip.framework.apollo.spring.util.SpringInjector.getInstance(SpringInjector.java:40) at com.ctrip.framework.apollo.spring.boot.ApolloApplicationContextInitializer.<init>(ApolloApplicationContextInitializer.java:66) ... 16 moreCaused by: com.ctrip.framework.apollo.exceptions.ApolloConfigException: Unable to initialize Apollo Spring Injector! at com.ctrip.framework.apollo.spring.util.SpringInjector.getInjector(SpringInjector.java:24) at com.ctrip.framework.apollo.spring.util.SpringInjector.getInstance(SpringInjector.java:37) ... 17 moreCaused by: java.lang.reflect.InAccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @16612a51 at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199) at java.base/java.lang.reflect.Method.setAccessible(Method.java:193) at com.google.inject.internal.cglib.core.$Reflectwww.devze.comUtils$1.run(ReflectUtils.java:52) at java.base/java.security.AjsccessController.doPrivileged(AccessController.java:318) at com.google.inject.internal.cglib.core.$ReflectUtils.<clinit>(ReflectUtils.java:42)
通过上述配置调整后,能编译成功,但是无法启动,控制没有任何日志,初步怀疑还是log依赖问题,由于时间关系,没有再继续,问题留到以后再弄,后面有新进展,会持续更新该文。
到此这篇关于Spring Boot 3.x微服务升级经历的文章就介绍到这了,更多相关Spring Boot 3.x微服务升级内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
精彩评论