redisson与sping boot版本不兼容的问题 zAdd 出现死循环

问题 - 递归循环

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版本

Comments: 0

「人生在世,留句话给我吧」

提交评论