Spring Boot配置多Redis实例启动提示找不到'redisTemplate' Bean问题
问题根因
出现该报错的核心原因是Spring Boot Redis自动配置逻辑和项目中的依赖默认Bean的场景不匹配,具体可分为两类:
- 自动配置链失效:Spring Boot Redis自动配置有两层依赖,首先
RedisConnectionFactory的自动配置触发条件是没有自定义的连接工厂Bean;其次默认redisTemplateBean的触发条件是不存在名为redisTemplate的Bean,且存在可用的RedisConnectionFactory。当您自定义了两个RedisConnectionFactory对接不同Redis实例后,默认连接工厂自动配置失效,进而导致默认redisTemplate也无法自动生成。 - 存在依赖默认
redisTemplate的业务/组件逻辑:项目中存在需要调用名为redisTemplate的Bean的代码,常见场景包括:- 直接使用
@Autowired注入RedisTemplate但未通过@Qualifier指定自定义Bean名称,Spring会优先查找名称为redisTemplate的同类型Bean - 使用Spring Data Redis的
@RedisRepository注解做实体持久化,该组件默认依赖redisTemplate完成底层操作 - 其他引入的第三方Redis相关starter组件,默认调用
redisTemplateBean
- 直接使用
解决建议
可根据项目实际需求选择对应方案:
- 方案1:补充注册默认
redisTemplateBean
如果项目需要保留通用的默认Redis操作实例,直接在Redis配置类中新增一个名为redisTemplate的Bean即可,可根据业务需求绑定任意一个Redis连接工厂,示例代码:@Bean public RedisTemplate<String, Object> redisTemplate(@Qualifier("你要绑定的连接工厂Bean名") RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); // 按需配置key、value序列化器等参数 return template; } - 方案2:全量适配自定义
RedisTemplateBean
如果项目不需要默认通用实例,所有Redis操作都要使用你定义的两个专用Bean,对应不同场景修改配置即可:- 直接注入场景:所有注入
RedisTemplate的位置,添加@Qualifier指定目标Bean名称,示例:@Autowired @Qualifier("userRedisTemplate") private RedisTemplate<String, Object> userRedisTemplate; @RedisRepository场景:给对应实体类的@RedisHash注解添加templateRef属性,指定绑定的自定义Bean名称,示例:@RedisHash(value = "user", templateRef = "userRedisTemplate") public class User { // 实体属性定义 }- 第三方组件依赖场景:查阅对应组件的配置文档,修改参数指定要使用的
RedisTemplateBean名称即可。
- 直接注入场景:所有注入
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

