先,找到第二行RedissonConnectionFactory.java:102这段代码追踪,发现和第一行和第三行的错误联系不上。 接着,分析第一行Caused by: java.lang.NoClassDefFoundError: org/springframework/data/redis/connection/RedisStreamCommands,意思是Java虚拟机不能找到合适的类:org/springframework/data/redis/connection/RedisStreamCommands,查看项目用到的jar包spring-data-redis-2.1.9.RELEASE.jar,发现确实没有该类,马上下载高等级包,发现spring-data-redis2.2.1及以上版本的包含有该类,从而尝试将pom文件的spring-data-redis的版本改为2.2.1,发现项目引用的还是2.1.9的老包,经分析,项目用到的是springboot是2.1.6版本所以导致子包spring-data-redis最高版本为2.1.9,再尝试修改pom将springboot版本升级,发现有很多类会报错,考虑到springboot版本升级关联性太强从而“另谋他法”。 然后,拿上次linux正常运行的包的pom和现在pom对比,发现新增了分布式锁redisson-spring-boot-starter3.15.6,与报错的第二行也对应上了,分析原因是3.11.6版本的分布式锁用到了类RedisStreamCommands,于是,尝试给分布式锁降级,果然降到3.15.6版本后,在linux成功运行
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>${redisson.version}</version>
<exclusions>
<exclusion>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-24</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-20</artifactId>
<version>${redisson.version}</version>
</dependency>