java.lang.NoClassDefFoundError: org/springframework/data/redis/connection/RedisZSetCommands$Tuple] with root cause"

HW·2024년 8월 2일
0

서론

이 오류는 Spring Data Redis와 Redisson 간의 버전 불일치로 발생한다.

본론

예제 오류

"java.lang.ClassNotFoundException: org.springframework.data.redis.connection.RedisZSetCommands$Tuple
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
org.redisson.spring.data.connection.RedissonConnection.<clinit>(RedissonConnection.java:2443)
org.redisson.spring.data.connection.RedissonConnectionFactory.getConnection(RedissonConnectionFactory.java:113)
org.springframework.data.redis.cache.DefaultRedisCacheWriter.execute(DefaultRedisCacheWriter.java:355)
org.springframework.data.redis.cache.DefaultRedisCacheWriter.get(DefaultRedisCacheWriter.java:142)

문제

오류 메시지는 org.springframework.data.redis.connection.RedisZSetCommands$Tuple 클래스를 찾을 수 없음을 나타내는데, 이는 종종 Spring Data Redis와 Redisson의 호환되지 않는 버전 때문이다.

해결 방법

Reddison과 Spring Data Redis의 버전이 호환되도록 맞춰준다.

수정 전 build.gradle

implementation 'org.springframework.boot:spring-boot-starter-data-redis'
	implementation 'org.redisson:redisson-spring-data-:3.18.0'

제멋대로 되어 있는 redis와 redisson 버전을 아래와 같이 바꿔준다.

수정 후 build.gradle

implementation ("org.redisson:redisson-spring-boot-starter:3.34.1") {
		exclude group: 'org.redisson', module: 'redisson-spring-data-33'
	}
	implementation "org.redisson:redisson-spring-data-27:3.34.1"
  • 충돌 모듈 제외 : redisson-spring-data-33 모듈을 제외하여 충돌을 방지한다.
  • 호환 모듈 포함 : redisson-spring-data-27 모듈을 포함하여 Spring Data Redis 2.7.x와 호환되도록 한다.

이는 Redisson 깃허브에 명시된 해결 방법이다.

결론

  1. 문제의 원인 파악
  2. build.gradle 수정하여 충돌 모듈 제외하고 호환 모듈 포함
  3. 해결

참조

https://github.com/redisson/redisson/tree/master/redisson-spring-boot-starter

profile
예술융합형 개발자🎥

0개의 댓글