spring boot 集成 spring session 实现分布式 session 共享,需引入 redis 依赖、配置 redis 连接参数、设置 spring.session.store-type=redis 启用会话存储,并可选优化为 json 序列化。

Spring Boot 集成 Spring Session 主要是为了在分布式或集群环境下实现 session 共享,避免用户请求被负载均衡分发到不同节点后丢失会话。整个过程不复杂,但关键配置不能遗漏。
添加核心依赖
在 pom.xml 中引入三类必要依赖:
- spring-boot-starter-data-redis:提供 Redis 连接能力
- spring-session-data-redis:Spring Session 的 Redis 实现模块
- spring-session-core(部分版本自动传递,显式声明更稳妥)
示例:
<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-data-redis</artifactid></dependency><dependency><groupid>org.springframework.session</groupid><artifactid>spring-session-data-redis</artifactid></dependency>
配置 Redis 连接参数
在 application.properties 或 application.yml 中填写 Redis 基础信息:
-
spring.redis.host、spring.redis.port、spring.redis.password(如有) -
spring.redis.database(可选,默认 0) -
spring.redis.timeout(建议设为毫秒,如3000ms)
连接池配置(推荐启用):
- Lettuce 连接池:
spring.redis.lettuce.pool.max-active、max-idle等
启用 Redis 存储会话
只需一行配置即可激活 Spring Session 的 Redis 支持:
spring.session.store-type=redis
该配置会让 Spring Boot 自动注册 springSessionRepositoryFilter,拦截所有 HTTP 请求并接管 HttpSession 的读写逻辑。
如需自定义过期时间,可加:
-
server.servlet.session.timeout=1800(单位:秒) - 或在
@EnableRedisHttpSession注解中指定:maxInactiveIntervalInSeconds = 1800
可选:优化序列化方式
默认使用 JDK 序列化(要求对象实现 Serializable),但不易调试且兼容性差。推荐改用 JSON 序列化:
- 添加
GenericJackson2JsonRedisSerializer或GenericFastJsonRedisSerializerBean - 确保存入 session 的对象是 POJO,无循环引用或不可序列化字段
例如:
@Bean
public RedisSerializer<object> springSessionDefaultRedisSerializer() {
return new GenericJackson2JsonRedisSerializer();
}</object>
集成完成后,所有 HttpSession.setAttribute() 和 getAttribute() 操作都会自动同步到 Redis,多实例部署下 session 自然共享,无需修改业务代码。











