文章目录
项目场景
由于近期项目做安全扫描,原项目中引用的Spring Cloud Hoxton.SR8,存在一些漏洞问题。也是因为Spring Cloud新组件的发布。所以打算升级到Spring Cloud 2020版本,在此记录一下一路的坎坷。
依赖关系
Spring Cloud组件的使用,是有依赖关系。若不进行相关组件升级,会报一系列的问题。非常让人EMO。
示例
Spring Cloud Version | Spring Cloud Alibaba Version | Spring Boot Version |
---|---|---|
Spring Cloud 2020.0.1 | 2021.1 | 2.4.2 |
Spring Cloud Hoxton.SR9 | 2.2.6.RELEASE | 2.3.2.RELEASE |
Spring Cloud Hoxton.SR8 | 2.2.5.RELEASE | 2.3.2.RELEASE |
升级记录
1.Spring Cloud Dependencies 升级
在使用Spring Cloud 2020之后,官方文档介绍新版spring cloud关闭了bootstrap.xml读取。所以需要增加引用。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
2.@EnableOAuth2Client升级@EnableWebSecurity
新版Spring Security 包移动至spring-cloud-commons下,见官方PR:https://github.com/spring-cloud/spring-cloud-commons/pull/870/files
日志信息:
Field accessTokenContextRelay in org.springframework.cloud.commons.security.oauth2.client.AccessTokenContextRelay
3.新增spring-cloud-loadbalancer支持,去除ribbon服务
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>${spring-cloud-starter-netflix.version}</version>
</dependency> -->
日志信息:
没有loadbalancer,但是nacos中ribbon会造成loadbalancer包失效,所以在包中移除ribbion依赖,并加入loadbalancer依赖。
org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'sqlSessionFactory': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'captchaController': Unsatisfied dependency expressed through field 'emailServiceClient';
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'EmailServiceClient': Unexpected exception during bean creation;
nested exception is java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
Caused by: java.lang.ClassCastException: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient cannot be cast to org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient
4.spring升级
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.7</version>
</dependency>
日志信息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup
5.新增spring-integration-core
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-core</artifactId>
<version>${spring-integration-core.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-jmx</artifactId>
<version>5.5.0</version>
</dependency>
日志信息:
Failed to introspect Class [org.springframework.integration.monitor.IntegrationMBeanExporter] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
以上是我在升级Spring Cloud相关组件,遇到的问题。希望这篇文章能对大家有所帮助。