2017-10-10 3 views
0

Essayer d'utiliser SpringBoot avec SpringData avec ElastiCache:SpringBoot ElastiCache JedisMovedDataException: Déplacés

application.properties:

spring.redis.host=XXXX-dev.XXXX.clusXXXcfg.XXX.cache.amazonaws.com 
spring.redis.port=6379 

CacheConfiguration:

@Configuration 
@PropertySource("classpath:application.properties") 
public class CacheConfiguration { 


@Value("${spring.redis.host}") 
private String redisHostName; 

@Bean 
public RedisTemplate<String, Company> redisTemplate() { 
    RedisTemplate<String, Company> template = new RedisTemplate(); 
    template.setConnectionFactory(jedisConnectionFactory()); 
    return template; 
} 

@Bean 
JedisConnectionFactory jedisConnectionFactory() { 
    JedisConnectionFactory factory = new JedisConnectionFactory(); 
    factory.setHostName(redisHostName); 
    factory.setUsePool(true); 
    return factory; 
} 


@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 

}

appel de service:

@Autowired 
RedisTemplate<String, Company> redisTemplate; 

private ValueOperations valueOperations; 

@PostConstruct 
private void init() { 
    valueOperations = redisTemplate.opsForValue(); 
} 

@Override 
public String createOtp(Company company) { 
    String token = UUID.randomUUID().toString(); 
    valueOperations.set(token, company); 
    valueOperations.getOperations().expire(token, 5, TimeUnit.MINUTES); 
    return token; 
} 

Erreur:

org.springframework.data.redis.ClusterRedirectException: redirect: fente 7228 à 10. .. : 6379. *

redis.clients.jedis.exceptions.JedisMovedDataException: Déplacés 7228 10. .. : 6379. *

La question est - quel est le problème avec la configuration?

Répondre

0

Vous exécutez votre mode Elasticache en mode Redis Cluster (seul le cluster Redis répond avec MOVED) mais la fabrique de connexions est configurée en mode autonome. Spring Boot peut configurer automatiquement toutes les choses que vous avez configurées manuellement pour vous. En gros, retirez votre CacheConfiguration classe (ou du moins pour la majorité de code):

@Configuration 
public class CacheConfiguration { 

    @Bean 
    public RedisTemplate<String, Company> redisTemplate(RedisConnectionFactory connectionFactory) { 
     RedisTemplate<String, Company> template = new RedisTemplate(); 
     template.setConnectionFactory(connectionFactory); 
     return template; 
    } 
} 

Et puis configurez les propriétés suivantes dans votre fichier application.properties:

spring.redis.cluster.nodes=XXXX-dev.XXXX.clusXXXcfg.XXX.cache.amazonaws.com # Comma-separated list of "host:port" pairs to bootstrap from. 

printemps charges de démarrage application.properties par défaut et la Redis auto-config configure un bean RedisTemplate<Object, Object> par défaut. La spécification des beans est un cas d'utilisation valide - ne dupliquez pas ce qui est déjà fourni par l'auto-config, surtout si vous voulez réaliser ce que fait l'auto-config.

Voir aussi:

+0

Thx beaucoup! Ça fonctionne maintenant :) –