项目场景:
在跟老师做项目时,使用 Spring Boot 整合 Redis 时,IDEA 被提醒“Could not autowire. No beans of ‘RedisConnectionFactory’ type found. ”错误。大概就是spring没有给你自动注入这个对象
问题描述
发现 connectionFactory 报错,但是奇怪的是,还能调用它的方法..........丝毫不影响它的使用
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
@ConditionalOnSingleCandidate
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
//默认的Key序列化器为:JdkSerializationRedisSerializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
原因分析:
具体原理我暂时没有弄明天,如果有哪位大佬知道,请求指点一二
解决方案:
- 把spring boot的依赖降到2.7.0以下,你会神奇的发现,报红线的那里没有了
- 如果是通过 @Autowired 注入,发现 redisTemplate 报错,那就使用 @Resource
- 如果你不想降低版本,那你就跟我一样加一个 @ConditionalOnSingleCandidate 注解