I have 2 instances of Redis Server redis1 and redis2. I'm trying get Data form redis1 and save data to redis2 with Spring Data Redis support but it's not working. My code:
//class a
@Configuration
public class RedisAConfig {
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setHostName("host1");
return jedisConnectionFactory;
}
@Bean
public RedisTemplate<String, String> redisTemplate() {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
return redisTemplate;
}
}
//class b
@Configuration
public class RedisBConfig {
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setHostName("host2");
return jedisConnectionFactory;
}
@Bean
public RedisTemplate<String, String> redisTemplate() {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
return redisTemplate;
}
}
//use class
@EnableConfigurationProperties({RedisAConfig.class, RedisBConfig.class})
public class Receiver {
@Autowired
private RedisAConfig redisAConfig;
@Autowired
private RedisAConfig redisBConfig;
private String getUsernameFromRedis(String userIp) {
return redisBConfig.redisTemplate().opsForValue()..get(userIp);
}
private void saveThreatsToRedis(String userIp, List<Log> threats) {
JSONSerializer serializer = new JSONSerializer();
String json = serializer.serialize(threats);
String key = "TH:" + userIp;
redisAConfig.redisTemplate().opsForValue().set(key, json);
}
}
When I'm using method getUsernameFromRedis() the host for redis which is used is "host1" not "host2" :-( Where is the problem?
Since it is a single application, you have to have unique bean names to populate them all to single ApplicationContext. Otherwise only one bean with the same name exists after context startup.
By default @Bean populates with the name from the method. That's why you see host1, not host2.
So, or provide unique names for those bean methods, or use @Bean(name = ) attribute.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With