복붙노트

[REDIS] 봄 4 일반적인 RedisTemplate을 건조

REDIS

봄 4 일반적인 RedisTemplate을 건조

난 당신이 굉장 봄 4, 현재의 @Autowired 제네릭을 가질 수 있음을 읽었습니다.

나는과 같이, 일반적인 RestTemplate을 @Autowired 한하고자하는 추상적 인 RedisService 클래스가 있습니다 :

public abstract class RedisService<T> implements InitializingBean {

private final String VALUE_KEY_PREFIX;
private final String SET_KEY;

@Autowired
private RedisTemplate<String, T> valueTemplate;

@Autowired
private StringRedisTemplate stringTemplate;

private SetOperations<String, String> setOperations;
private ValueOperations<String, T> valueOperations; 
// and so on...
}

valueTemplates 다음 @Autowired 할에 대한 내 자바 설정은 다음과 같은 :

@Bean
public RedisTemplate<String, MyTypeA> myTypeARedisTemplate() {
    RedisTemplate<String, MyTypeA> template = new RedisTemplate<>();

    template.setKeySerializer(stringRedisSerializer());
    template.setHashKeySerializer(stringRedisSerializer());
    template.setValueSerializer(new Jackson2JsonRedisSerializer<>(MyTypeA.class));
    template.setConnectionFactory(jedisConnectionFactory());

    return template;
}

@Bean
public RedisTemplate<String, MyTypeB> myTypeBRedisTemplate() {
    RedisTemplate<String, MyTypeB> template = new RedisTemplate<>();

    template.setKeySerializer(stringRedisSerializer());
    template.setHashKeySerializer(stringRedisSerializer());
    template.setValueSerializer(new Jackson2JsonRedisSerializer<>(MyTypeB.class));
    template.setConnectionFactory(jedisConnectionFactory());

    return template;
}
// ... for N MyType classes.

RedisService를 확장 각 클래스는 클래스는 다음과 같은 :

@Service
public class MyTypeAService extends RedisService<MyTypeA> { 

내 자바 설정 이러한 RedisTemplate @Beans을 생성 할 수있는 더 DRY 방법이 있습니까?

해결법

  1. ==============================

    1.저도 같은 문제를 가지고 있었다. 당신은이에 대한 일반 콩을 작성하고 GenricJackson2JsonRedisSerializer를 사용할 수 있습니다. 문제는이 json으로 사용하여 나중에 작업에 직렬화에 대한 몇 가지 추가 데이터로 저장 될 것입니다.

    저도 같은 문제를 가지고 있었다. 당신은이에 대한 일반 콩을 작성하고 GenricJackson2JsonRedisSerializer를 사용할 수 있습니다. 문제는이 json으로 사용하여 나중에 작업에 직렬화에 대한 몇 가지 추가 데이터로 저장 될 것입니다.

    또 다른 방법은 Jackson2JsonRedisSerializer을 사용하는 것입니다하지만 내가하는 방법을 알아 내려고을 couldnt 일, 마녀의 제네릭 형식의 클래스 인스턴스를 필요로한다.

    @Bean("objectRedisTemplate")
    public <T> RedisTemplate<String, T> objectRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, T> redisTemplate = new RedisTemplate<>();
    
        redisTemplate.setConnectionFactory(redisConnectionFactory);
    
        RedisSerializer<String> serializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(serializer);
        redisTemplate.setHashKeySerializer(serializer);
    
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    
        return redisTemplate;
    }
    

    캐시 클래스의 사용법 :

    @Autowired
    @Qualifier("objectRedisTemplate")
    private RedisTemplate<String, MyTypeA> redisTemplate;
    
  2. from https://stackoverflow.com/questions/23208010/drying-up-a-generic-redistemplate-in-spring-4 by cc-by-sa and MIT license