Spring整合Redis之ConnectionFactory从何而来?

343 阅读1分钟

最近在学习Redis,入门的时候看了个demo,对于ConnectionFactory比较感兴趣,想搞明白它是怎么来的。

@Configuration
public class RedisConfig {   
        @Bean    
        public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory connectionFactory){
            return new StringRedisTemplate(connectionFactory);    
    }
}

于是乎,我发现了RedisAutoConfiguration这个类,但是答案不在这里,通过继续深入到了

LettuceConnectionConfiguration这个配置类中去,


这下问题解决了,在这里已经对connctionFactory进行了转配,所以demo中传参的时候,spring就会将这个bean注入。

通过debug,也可以发现,demo中的那个连接工厂就是

LettuceConnectionFactory的实例。


于是自己自定义了一个ConnectionFactory

@Configuration
public class RedisConfig {
    @Value("${spring.redis.host}")
    private String redisHost;

    @Value("${spring.redis.port}")
    private int redisPort;

    @Value("${spring.redis.database}")
    private int redisDb;

    @Bean
    public RedisConnectionFactory connectionFactory() {
        JedisPoolConfig poolConfig = new JedisPoolConfig(); 
       poolConfig.setTestOnBorrow(true);
        poolConfig.setTestOnReturn(false);
        poolConfig.setTestWhileIdle(true);
        JedisClientConfiguration clientConfig = JedisClientConfiguration.builder()                
          .usePooling().poolConfig(poolConfig).and().build();        
    // 单点redis        
    RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration();        
        
    redisConfig.setHostName(redisHost);        
    redisConfig.setPort(redisPort);        
    redisConfig.setDatabase(redisDb);        
    return new JedisConnectionFactory(redisConfig,clientConfig);    
    }   

 @Bean    
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory connectionFactory){
        return new StringRedisTemplate(connectionFactory);    
    }
}