TIL(Today I Learned)

TIL - RedisPassword

Happy._. 2024. 5. 30. 07:25

Redis 사용을 위한 설정 중 다음과 같은 문제가 발생했다.

 

비밀번호가 String이면 안되고 RedisPassword 타입이어야 한다.

처음에는 단순히 String 타입의 password를 타입 캐스트 연산자를 사용해 다음과 같이 RedisPassword로 변경을 시도했다.

redisStandaloneConfiguration.password = password as RedisPassword

 

그리고 다음과 같이 ClassCastException이 발생했다.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisConnectionFactory' defined in class path resource [com/noreabang/strawberryrabbit/infra/email/RedisConfig.class]: Failed to instantiate [org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory]: Factory method 'redisConnectionFactory' threw exception with message: class java.lang.String cannot be cast to class org.springframework.data.redis.connection.RedisPassword (java.lang.String is in module java.base of loader 'bootstrap'; org.springframework.data.redis.connection.RedisPassword is in unnamed module of loader 'app')
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory]: Factory method 'redisConnectionFactory' threw exception with message: class java.lang.String cannot be cast to class org.springframework.data.redis.connection.RedisPassword (java.lang.String is in module java.base of loader 'bootstrap'; org.springframework.data.redis.connection.RedisPassword is in unnamed module of loader 'app')
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class org.springframework.data.redis.connection.RedisPassword (java.lang.String is in module java.base of loader 'bootstrap'; org.springframework.data.redis.connection.RedisPassword is in unnamed module of loader 'app')

 

RedisStandaloneConfiguration 클래스 내부를 확인해보니 password의 타입이 RedisPassword로 되어 있었다.

 

이번에도 내부 코드 확인을 위해 RedisPassword 타입을 클릭해보면 다음과 같은 코드를 볼 수 있다.

 

위에서 본 RedisPassword 클래스의 of 메서드를 사용해 다음과 같이 코드를 작성하면 정상적으로 동작하는 것을 볼 수 있다.

redisStandaloneConfiguration.password = RedisPassword.of(password)