分布式锁redisson依赖了特定的spring boot版本,如果版本不兼容就可能出现问题
问题 - 递归循环
java.lang.StackOverflowError
at org.springframework.data.redis.connection.DefaultedRedisConnection.zAdd(DefaultedRedisConnection.java:863)
at org.springframework.data.redis.connection.DefaultedRedisConnection.zAdd(DefaultedRedisConnection.java:863)
at org.springframework.data.redis.connection.DefaultedRedisConnection.zAdd(DefaultedRedisConnection.java:863)
at org.springframework.data.redis.connection.DefaultedRedisConnection.zAdd(DefaultedRedisConnection.java:863)
问题起源
org.springframework.data.redis.connection.DefaultedRedisConnection
@Override
@Deprecated
default Boolean zAdd(byte[] key, double score, byte[] value) {
return zSetCommands().zAdd(key, score, value);
}
org.springframework.data.redis.connection.RedisConnection
default RedisZSetCommands zSetCommands() {
return this;
}
是因为zSetCommands()一直返回this,然后递归调用自身的zAdd方法,引起栈溢出
版本冲突
- spring-boot版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
</parent>
- redisson版本
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.4</version>
</dependency>
解决办法
升级spring-boot版本到2.5.7及以上或者redisson降级到3.15.6
版本匹配,可以在redisson-spring-boot-starter中确认依赖的spring-boot版本
网友评论