SpringBoot集成 Redis,默认连接工厂为什么是LettuceConnectionFactory?
今天搭建了一个 SpringBoot 集成 Redis的一个demo,
自定义 redisTemplate 的Bean对象发现了没有看到注入 RedisConnectionFactory,分别在其实现类 JedisConnectionFactory 跟 LettuceConnectionFactory 找出了自己的疑问–
@Configurationpublic class RedisConfig { private final StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); private final FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); / * 设置Redis序列化方式,默认使用的JDKSerializer的序列化方式,效率低,这里我们使用 FastJsonRedisSerializer * @param redisConnectionFactory * @return */ @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); // key序列化 redisTemplate.setKeySerializer(stringRedisSerializer); // value序列化 redisTemplate.setValueSerializer(fastJsonRedisSerializer); // Hash key序列化 redisTemplate.setHashKeySerializer(stringRedisSerializer); // Hash value序列化 redisTemplate.setHashValueSerializer(fastJsonRedisSerializer); redisTemplate.setConnectionFactory(redisConnectionFactory); return redisTemplate; }}
如图,我们并未注入RedisConnectionFactory 那么这个类在哪里被定义的呢?
通过在 LettuceConnectionFactory打了断点 然后发现 在LettuceConnectionConfiguration类中找到了答案
@Bean@ConditionalOnMissingBean(RedisConnectionFactory.class)LettuceConnectionFactory redisConnectionFactory(ObjectProvider<LettuceClientConfigurationBuilderCustomizer> builderCustomizers,ClientResources clientResources) {LettuceClientConfiguration clientConfig = getLettuceClientConfiguration(builderCustomizers, clientResources,getProperties().getLettuce().getPool());return createLettuceConnectionFactory(clientConfig);}
在 LettuceConnectionConfiguration 设置了@ConditionalOnMissingBean(RedisConnectionFactory.class)
意思就是如果当前容器中没找到redis连接工厂,那么就默认返回 LettuceConnectionFactory