【现状及起因】
1:在2019-07-23号jackson-databind报高危漏洞,低于2.9.9.1的版本存在问题,需要升级到2.9.9.1及以上版本;然后问题就接踵而至......其中最大的问题就是SpringBoot升级版本的问题了
【定位分析】
1:SpringBoot的spring-boot-starter-web中有间接引用jackson-databind,需要升级
项目一中的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包实现线程池。
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包
开始使用项目中在使用的版本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包版本冲突