Redis 코드를 짜다가 에러가 났다.
@RequiredArgsConstructor
@Component
@EnableRedisRepositories
public class RedisRepositoryConfig {
private final RedisProperties redisProperties;
@Bean
public RedisConnectionFactory redisConnectionFactory(){
return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
Method annotated with @Bean is called directly. Use dependency injection instead.
@Bean 설정한 메서드를 주입할 수 없다는 것이다. DI를 권장하고 있다.
생성자를 이용해서 DI를 해보려고 한다.
새로운 RedisConnection 클래스를 만든다.
오류가 났던 메소드인 redisConnectionFactory()를 구현한다.
생성자 이용한 DI를 위해서 @RequiredArgConstructor를 클래스 위에 붙인다.
@RequiredArgsConstructor
@Component
public class RedisConnection {
private final RedisProperties redisProperties;
@Bean
public RedisConnectionFactory redisConnectionFactory(){
return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
}
}
RedisRepositoryConfig에서는 RedisConnection 클래스를 가져오고
RedisConnection 클래스에 있는 redisConnectionFactory를 주입하면 해결된다.
@RequiredArgsConstructor
@Component
@EnableRedisRepositories
public class RedisRepositoryConfig {
private final RedisConnection redisConnection;
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnection.redisConnectionFactory());
return redisTemplate;
}
}
오류 없이 redisConnection.redisConnectionFactory()를 이용할 수 있다.
'DevOps > Redis' 카테고리의 다른 글
맥 redis 설치 및 실행하기 (0) | 2022.12.05 |
---|
댓글