redisson與sping boot版本不兼容的問題

分佈式鎖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版本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章