Spring Boot为何未自动配置Spring Session Redis?
我按照Spring官方指南将Spring Boot 3.2应用升级为使用Redis作为会话存储,已完成以下操作:
- 添加了依赖:
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
- 设置了YAML配置:
spring.session.redis.flush-mode: on_save spring.session.redis.namespace: "spring:session" spring.data.redis.host: "localhost" spring.data.redis.port: 6379
- Redis服务器正常运行,可通过
redis-cli操作,确认连接无问题。
但Redis中找不到任何Spring Session相关键,认证功能正常,推测会话仍由Tomcat管理。根据官方文档,应该生成springSessionRepositoryFilter Bean,但上下文里没有这个Bean,也不存在RedisConnectionFactory。另外,使用spring-session-jdbc时会话能正常存储到JDBC数据库。
请问为何按文档步骤操作后,Spring Session仍未配置Redis作为存储?是否需要文档未提及的额外配置?
针对该问题,可能的原因及对应解决办法如下:
1. 缺失Redis客户端依赖
spring-session-data-redis本身不包含Redis客户端实现,必须额外添加对应客户端依赖才能让Spring创建RedisConnectionFactory:
- 若使用默认的Lettuce客户端,添加依赖:
<dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </dependency>
- 若使用Jedis客户端,添加依赖:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>
2. 显式指定会话存储类型
Spring Boot 3.x中需显式指定会话存储类型,避免默认使用Tomcat内置会话管理,在application.yaml中添加:
spring.session.store-type: redis
该配置会强制启用Redis会话存储,触发springSessionRepositoryFilter等核心Bean的自动创建。
3. 检查自动配置是否被排除
确认应用主类或配置类未排除Spring Session/Redis的自动配置类,比如@SpringBootApplication(exclude = {RedisAutoConfiguration.class, SpringSessionRedisAutoConfiguration.class})这类注解会直接导致自动配置失效。
4. 验证版本兼容性
确保spring-session-data-redis版本与Spring Boot 3.2兼容,建议依赖Spring Boot的自动版本管理,不要手动指定版本号,避免出现版本不匹配导致的自动配置失败。
验证方式
配置完成后启动应用,可通过以下方式确认生效:
- 查看日志,是否存在
Spring Session using Redis repository相关输出 - 执行
redis-cli keys "spring:session:*"命令,检查是否生成会话键 - 在代码中尝试注入
RedisConnectionFactory,确认Bean已存在
内容的提问来源于stack exchange,提问作者Slevin

