项目由SpringBoot1.5.17升级到SpringBoot2.0.5所踩的坑

【现状及起因】

1:在2019-07-23号jackson-databind报高危漏洞,低于2.9.9.1的版本存在问题,需要升级到2.9.9.1及以上版本;然后问题就接踵而至......其中最大的问题就是SpringBoot升级版本的问题了

【定位分析】

1:SpringBoot的spring-boot-starter-web中有间接引用jackson-databind,需要升级

项目由SpringBoot1.5.17升级到SpringBoot2.0.5所踩的坑_第1张图片

项目一中的SpringBoot为1.5.17,排除引用后,重新引用jackson-databind后,项目启动报错,无法找到类。

项目二中的SpringBoot为2.0.5,排除引用后,重新引用jackson-databind后,项目启动运行正常。

项目一、二对比发现,Jackson-databind新版本与SpringBoot1.5.17版本不兼容,计划升级SpringBoot版本

2:将SpringBoot版本由1.5.17升级到2.0.5,升级后redis的pom配置异常,SpringBoot1.x为spring-boot-starter-redis,而Springboot2.x为 spring-boot-starter-data-redis,并且需要添加commons-pool2包实现线程池。

项目由SpringBoot1.5.17升级到SpringBoot2.0.5所踩的坑_第2张图片

pom配置完成后,因为是在类中手动配置的redis信息,所以RedisConfig.java需要修改缓存配置

2.1: 启动后报错如下:

2019-07-24 20:04:51 [PushShippingRecordToCenterConsumerQueue--3-thread-3] ERROR c.z.l.s.s.r.SpringRedisService - 
org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is
io.lettuce.core.RedisCommandTimeoutException: Command timed out
    at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:70)

网查有说:

(1)应该加超时时间timeout, 本地配置为0,后期改为6S, 60S问题照样存在,

(2)windows,mac,linux系统不同,这个问题在Linux系统上没有,mac,windows会有,但是我的项目二就是这样用的呀,为啥没有报错。。。(另辟蹊径,此处耗时较长)

网查可知,SpringBoot2.x后redis的驱动使用的是lettuce,不是jedis,如果想使用jedis需要在spring-boot-starter-data-redis中排除lettuce排除后启动仍然报错,

2.2: 使用测试类测试redis连接错误,无法获取连接,网查只SpringBoot2.x若使用jedis驱动,需要引入redis.clients包

项目由SpringBoot1.5.17升级到SpringBoot2.0.5所踩的坑_第3张图片

开始使用项目中在使用的版本2.7.3,项目启动异常,如下

    ... 85 common frames omitted
Caused by: java.lang.NoClassDefFoundError: redis/clients/jedis/GeoCoordinate
    ... 99 common frames omitted
Caused by: java.lang.ClassNotFoundException: redis.clients.jedis.GeoCoordinate
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)

后注释掉版本,默认加载2.9.0重启后项目运行正常

【解决方案】

参照定位分析

【问题根因】

jar包版本冲突

 

你可能感兴趣的:(springBoot,问题)