最近在学习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);
}
}