我有2个Redis Server redis1和redis2实例。
我正在尝试从Spring数据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” :-(
哪里有问题?

最佳答案

由于它是单个应用程序,因此必须具有唯一的bean names才能将它们全部填充为单个ApplicationContext。否则,上下文启动后仅存在一个同名的bean。

默认情况下,@Bean使用方法中的名称填充。这就是为什么您看到host1而不是host2的原因。

因此,或者为这些bean方法提供唯一的名称,或者使用@Bean(name = )属性。

关于spring - Spring Data Redis多个实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28015587/

10-14 12:15