前言
最近遇到了一个项目,需求是升级springboot版本。项目用到了很多组件,redis、Apollo、zipkin以及SpringCloud的一套组件。升级过程踩了很多坑,我把自己遇到的问题整理了一下供大家学习交流。
1.版本选择
SpringBoot 1.4.2 ——> 2.3.2
SpringCloud 1.3.1 ——>Hoxton.SR6
jedis 2.8.2 ——>3.3.0
Zipkin的版本仍然使用11.2.0.4的,没有做升级
Apollo-client也没有做升级,使用的是1.6.0的版本
2.升级SpringCloud遇到的问题
2.1依赖问题
首先,确保SpringBoot和SpringCloud版本对应起来。
在SpringBoot2.x之后的SpringCloud的依赖有一些变化
SpringBoot2.x之前
<!-- eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- ribbon负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<!-- eureka服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
SpringBoot2.x之后
<!-- ribbon负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!-- eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- eureka服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.2配置问题
SpringCloud获取eureka实例的参数改变了
升级前:
${spring.cloud.client.ipAddress}
升级后:
${spring.cloud.client.ip-address}
3.jedis问题
jedis在3.0之前和之后在关闭资源上也有一些变化我们可以看到源码上注释说,这两个方法在3.0之后不用了。如果我们自己写了dataSource就需要做出相应的修改。
jedis3.0之前的实现方式
public void closeResource(Jedis jedis, boolean broken) {
if (jedis != null) {
try {
if (broken) {
this.pool.(jedis);
} else {
this.pool.returnResource(jedis);
}
} catch (Exception var4) {
this.log.error(var4.getMessage(), var4);
}
}
}
jedis之后我们的实现方式
public void closeResource(Jedis jedis, boolean broken) {
if (jedis != null) {
jedis.close();
}
}
4.可能出现的其他问题
4.1启动报xxx环境错误
可能是spring热部署的配置没有关闭
spring.devtools.restart.enabled=false
4.2SpringBean不唯一
如果之前的项目没有这个问题,那我们加一个配置把重复的bean覆盖掉就好了
spring.main.allow-bean-definition-overriding=true