我有2个Redis Server redis1和redis2实例。 我正在尝试使用Spring Data Redis支持获取数据形式redis1并将数据保存到redis2但它无法正常工作。我的代码:
//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);
}
}
当我使用方法getUsernameFromRedis()时,使用redis的主机是“host1”而不是“host2”:-( 问题在哪里?
答案 0 :(得分:2)
由于它是一个应用程序,因此您必须使用唯一的bean names
将其全部填充为单个ApplicationContext
。否则在上下文启动后只存在一个具有相同名称的bean。
默认情况下,@Bean
会填充方法中的名称。这就是为什么你看到host1
,而不是host2
。
所以,或者为这些bean方法提供唯一的名称,或者使用@Bean(name = )
属性。
答案 1 :(得分:1)
@Autowired 私人RedisAConfig redisAConfig;
@Autowired 私人 RedisAConfig redisBConfig;
它应该是RedisBConfig。