Spring Boot集成Spring Session与Redis启动报RedisConnectionFactory缺失如何解决
问题原因
这个错误是典型的Bean初始化循环依赖问题:SecurityConfig作为Spring Security的核心配置类,初始化优先级非常高,你直接在类中通过字段注入RedisIndexedSessionRepository,会强制Spring在初始化SecurityConfig的阶段就实例化RedisIndexedSessionRepository,但此时Redis连接相关的Bean还未完成初始化,就会触发RedisConnectionFactory is required的报错,同时和Spring Session的自动配置逻辑形成循环引用。
解决方案
按以下步骤修改即可解决,同时保留最大会话数控制能力:
步骤1:移除SecurityConfig中的字段注入
删除类中声明的@Autowired private RedisIndexedSessionRepository redisIndexedSessionRepository;字段
步骤2:调整sessionRegistry Bean的注入方式
将RedisIndexedSessionRepository作为Bean方法的入参传入,Spring会在实际需要创建SessionRegistry实例时才自动注入依赖,避免提前触发初始化:
@Bean public SpringSessionBackedSessionRegistry<?> sessionRegistry(RedisIndexedSessionRepository redisIndexedSessionRepository) { return new SpringSessionBackedSessionRegistry<>(redisIndexedSessionRepository); }
可选补充:如果仍有初始化顺序问题
可以给sessionRegistry Bean添加@Lazy注解,强制延迟初始化:
@Bean @Lazy public SpringSessionBackedSessionRegistry<?> sessionRegistry(RedisIndexedSessionRepository redisIndexedSessionRepository) { return new SpringSessionBackedSessionRegistry<>(redisIndexedSessionRepository); }
额外检查项
如果修改后仍有Redis连接相关报错,确认以下配置:
- 已引入
spring-boot-starter-data-redis、spring-session-data-redis以及连接池依赖commons-pool2 - application.yaml中的Redis连接配置(host、port、password(如果有设置))正确,本地Redis服务正常运行
内容的提问来源于stack exchange,提问作者stringy05
相关产品推荐
相关产品推荐

