Boot4升后session_redis属性怎么改名

升Boot4后Session旧前缀失效:改spring.session.data.redis.*。按Migration Guide讲清改名、starter、连接边界与验收。

Boot4 升后 spring.session.redis 为什么不生效?

Spring Boot 4.0 Migration Guide「Spring Session」写得很直:

The properties for Spring Session Data Redis have been renamed to reflect the dependencies on Spring Data Redis. Properties that previously began with spring.session.redis now begin with spring.session.data.redis.

也就是说:不是 Spring Session 被移除 ,而是 Redis Session 的配置前缀对齐了 Spring Data Redis------旧的 spring.session.redis.* 在 Boot 4 里已换到 spring.session.data.redis.*。Configuration Changelog 的 Removed 表也一一指向这批新键。

常见现象对照:

现象 大致原因
升 4.0 后旧 spring.session.redis.* 像没生效 前缀已改名,旧键不再绑定
Redis 里看不到预期 session key / namespace 不对 仍按旧前缀配,或 namespace 未随新键生效
登录态丢了 / 多实例会话不同步 Session 存储选项没绑上,实际可能仍走默认 servlet 会话
「明明配了 spring.data.redis.host」仍不写 Session 连接项与 Session 项是两套命名空间,见下文边界

同系列 Boot4 踩坑里,mongodb 属性改名见 168626140,Batch 默认内存改回库见 168731445,HttpServiceClient 换法见 168514849,Undertow 迁移见 168409414。本稿只盯 Session Redis 配置前缀怎么改,不把那些主题再写一遍。

先过一张决策图:

图:升 Boot4 后迁前缀→确认 starter→评估 @Enable 退避→核对连接与 timeout→验收;migrator 用完移除。*

要改成哪一串前缀?

批量规则只有一条:

旧前缀(Boot 3) 新前缀(Boot 4)
spring.session.redis.* spring.session.data.redis.*

绑定类是 org.springframework.boot.session.data.redis.autoconfigure.SessionDataRedisProperties,注解为 @ConfigurationProperties("spring.session.data.redis")。也就是说,YAML/Properties 里凡是以前挂在 spring.session.redis 下的项,都应落到这个新前缀上。

示例:改名前后对照

yaml 复制代码
# Boot 3(勿再沿用)
# spring:
#   session:
#     redis:
#       namespace: spring:session
#       flush-mode: on-save

# Boot 4
spring:
  session:
    timeout: 30m
    data:
      redis:
        namespace: spring:session
        flush-mode: on-save
        save-mode: on-set-attribute
        repository-type: default
        configure-action: notify-keyspace-events
        cleanup-cron: "0 * * * * *"

常见项默认值(Changelog / appendix)

按 Configuration Changelog 与 application-properties 附录,spring.session.data.redis.* 常见默认如下:

属性 默认值
cleanup-cron 0 * * * * *
configure-action notify-keyspace-events
flush-mode on-save
namespace spring:session
repository-type default
save-mode on-set-attribute

升级时不必把六项全抄一遍;至少 把你项目里实际覆写过的旧键改到新前缀。未覆写的会走上表默认------其中 namespace=spring:session 直接影响 Redis 里 key 的前缀,验收时要盯它。

超时仍用 spring.session.timeout (未设时 servlet 场景可回落 server.servlet.session.timeout),这一项没有 改成 spring.session.data.redis.timeout。

starter 名字有没有变?

有,而且要和属性前缀一起核对。参考文档 Spring Session 与 Migration Guide Starters 表:

能力 主依赖 测试 companion
Spring Session Data Redis spring-boot-starter-session-data-redis spring-boot-starter-session-data-redis-test

Servlet 侧拉上 Redis Session starter 后,Boot 可自动配置 Session,取代 手写 @Enable*HttpSession 的需要;Reactive 侧依赖同一 Redis starter,取代 @EnableRedisWebSession。

Maven

xml 复制代码
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-session-data-redis</artifactId>
</dependency>
<!-- 另保留你的 Redis 连接依赖,例如 spring-boot-starter-data-redis -->

Gradle

kotlin 复制代码
dependencies {
    implementation("org.springframework.boot:spring-boot-starter-session-data-redis")
    // implementation("org.springframework.boot:spring-boot-starter-data-redis")
}

只改 YAML、不换 starter,或 starter 对了但属性仍停在旧前缀------两种半吊子状态都常见,升级清单里建议 依赖与配置同 MR 改完。

spring.data.redis 连接配置要不要一起改?

不要。 这是本稿最容易写错、也最值得单独强调的边界:

命名空间 职责 Boot 4 是否因 Session 而改名
spring.data.redis.*(如 host / port / password / url) Redis 连接 / 客户端 未改名
spring.session.data.redis.* Session 存储选项(namespace、flush-mode 等) 由 spring.session.redis.* 改名而来
spring.session.timeout Session 超时 仍有效,勿挪进 data.redis 下

Migration Guide 只宣布 Session 属性前缀 rename,没有 声称连接前缀跟着改。把 spring.data.redis.host 误改成别的「看起来更对称」的名字,属于自造坑。

yaml 复制代码
spring:
  data:
    redis:
      host: redis.example.com
      port: 6379
      password: ${REDIS_PASSWORD}
  session:
    timeout: 30m
    data:
      redis:
        namespace: spring:session
        flush-mode: on-save

属性归属可以再压成一张图:

图:连接层 spring.data.redis 未改名;Session 存储改 data.redis;timeout 仍有效。

可选:properties-migrator 看一眼再删

Migration Guide「Configuration Properties Migration」建议:升级过程中可加运行时依赖 spring-boot-properties-migrator,启动时给出旧键诊断,并做临时运行时迁移。官方明确要求:

Once you're done with the migration, please make sure to remove this module from your project's dependencies.

实操建议:加 migrator → 看日志里旧 spring.session.redis.* 提示 → 改 YAML → 立刻从依赖里删掉 migrator。不要把 migrator 留在生产 BOM 里当长期兼容层。

手写 @Enable* 会怎样?

参考文档说明:若你手写 @Enable*HttpSession(servlet)或 @EnableRedisWebSession(reactive),Boot 的 Session 自动配置会 back off;或者你直接依赖 Session 模块而非 Boot starter,改用注解属性配置。

排障顺序建议:

  1. 全局搜 @EnableRedisHttpSession / @EnableRedisWebSession / 其它 @Enable*HttpSession
  2. 能删则删,交给 spring-boot-starter-session-data-redis 自动配置
  3. 必须保留时,确认注解属性与 spring.session.data.redis.* 不打架,并接受「自动配置已退避」这一前提

这和 Batch 侧手写 @EnableBatchProcessing 导致 schema 初始化失效是同一类心智:注解一上手,Boot 的「开箱」路径就让位了。

相邻边界(一句带过,勿抢主线)

  • Hazelcast Session :spring.session.hazelcast.* 在 Boot 4 是 移除(无替换),不是改名;直持已交 Hazelcast 团队。本稿不展开迁移。
  • Mongo Session :Migration Guide 写旧 spring.session.mongodb.* → spring.session.data.mongodb.*;同时 Features Removed 称 Spring Session MongoDB 直持已移出 Boot。属性改名心智可对照 168626140 那类「前缀对齐」文,但 Mongo Session 产品路径另文,勿与本稿 Redis 主线混写。

怎么验证 Session 已经写进 Redis?

验收不要只看「应用能启动」:

  1. 启动日志:改名前后对比;若开过 migrator,确认旧键告警消失后再卸依赖。
  2. Redis key / namespace :默认 namespace 为 spring:session,用 KEYS/SCAN(或你们平台的只读控制台)看是否出现对应前缀;若你覆写了 namespace,以配置值为准。
  3. 登录态:单实例登录 → 刷新仍保持;有条件时再做一次多实例/滚动发布,确认会话仍命中同一 Redis,而不是退回容器内存会话。
  4. 超时 :调短 spring.session.timeout 做一次过期观察,确认走的是 Session 语义而非误改连接超时。

和 mongodb 属性改名、Batch 换 jdbc starter 一样,Session Redis 前缀适合单独开一个小 MR:只动 starter + spring.session.data.redis.*,不要和 Undertow / HttpService 大迁移揉在同一提交里。

边界与不要踩的坑

  • 不要写「Spring Session 被移除」。Boot 4 仍提供 Session 自动配置与 Redis/JDBC starter;变的是前缀与模块化 starter。
  • 不要改 spring.data.redis.* 连接项的名字------那不是本次 rename 范围。
  • Hazelcast 是移除、Redis 是改名,两套话术不要混。
  • 手写 @Enable* 会导致自动配置 back off;排障先搜注解。
  • migrator 用完必须移除。
  • 禁写 WebClient.Builder 上的 responseTimeout / connectTimeout 迁移教条。
  • 勿抢主线:mongodb 属性、Batch-jdbc、HttpService、Undertow 各有专文(见内链)。
  • 真相源:Migration Guide · Spring Session、Configuration Changelog、Reference · Spring Session、SessionDataRedisProperties。

改名落地时的几条实操习惯

升级窗口里,建议把「搜旧前缀」当成和「搜 @Enable」同级的门禁:

  1. 全仓库搜 spring.session.redis(含 application*.yml / application*.properties / 配置中心导出快照 / Helm values)。
  2. 同步搜依赖坐标,确认已是 spring-boot-starter-session-data-redis,而不是只改了 YAML、starter 仍停留在旧心智。
  3. 配置中心若按 profile 分层(dev/stage/prod),每一层都要改到,避免「本地通了、预发仍旧键」。
  4. 改完先在非生产用一次短超时,并给 namespace 加临时环境后缀,确认 key 落点后再改回约定值。

若团队还在用 spring-boot-properties-migrator 做大范围升版,可以把 Session 前缀当作 migrator 日志里的「样板告警」:先修这一簇,再扫其它 rename,节奏更稳。修完务必从依赖里删掉 migrator------它只是迁移期诊断工具,不是长期兼容层。

关于「会话不进 Redis」的排障顺序,实务上更稳妥的是:

  • 先看有没有绑上新前缀(配置绑定最常见);
  • 再看 starter 是否为 spring-boot-starter-session-data-redis;
  • 再看是否被 @Enable*HttpSession / @EnableRedisWebSession 打退自动配置;
  • 最后才怀疑序列化、网关粘滞会话、过滤器顺序之类更深的问题。

前三步都是 Boot4 升版文档级变化;把顺序弄反,容易在 Redis 序列化器上耗一整天,最后发现只是 YAML 前缀没改完。

若你们用的是 reactive Web 栈,记住:Redis Session 仍然走同一只 spring-boot-starter-session-data-redis。启用注解从 servlet 侧换成 @EnableRedisWebSession 时,同样会触发自动配置退避。不要以为 reactive 另有一套属性前缀------存储选项仍在 spring.session.data.redis.*,连接仍在 spring.data.redis.*。

本稿只把「升版当天能改对、能验收」的最小闭环写清楚。并发会话、自定义 SessionRepository 等更深策略请回 Spring Session 本尊文档,别在属性 rename 文里硬塞。

生产切换时还有一个容易忽略的点:若旧集群里已经堆了大量 spring:session:* 键,改的是应用读写下标与配置,一般不必为了 rename 去扫库删历史键;让旧键按原 TTL 过期即可。真正要做的是确认新实例写入的 namespace 与网关/多实例读路径一致,避免滚动发布窗口出现「一半实例读新配置、一半仍旧前缀」的分裂。灰度顺序建议:先改配置与依赖并完成单实例验收,再滚动其余节点。

FAQ

Boot4 升后 spring.session.redis 为什么不生效?

属性已 rename 为 spring.session.data.redis.*,旧前缀不再绑定 Session Data Redis 配置。

要改成哪一串前缀?

spring.session.redis.* → spring.session.data.redis.*;绑定类 SessionDataRedisProperties。

starter 名字有没有变?

使用 spring-boot-starter-session-data-redis(测试可用 spring-boot-starter-session-data-redis-test)。

spring.data.redis 连接配置要不要一起改?

不要。连接仍是 spring.data.redis.*;改的是 Session 存储前缀。

怎么验证 Session 已经写进 Redis?

看启动日志、Redis 中 namespace(默认 spring:session)下的 key,以及登录态是否跨请求/实例保持。

小结 checklist

  • 全局替换:spring.session.redis.* → spring.session.data.redis.*
  • 依赖改为 spring-boot-starter-session-data-redis(按需 test companion)
  • 确认 SessionDataRedisProperties / 新前缀;按需核对六项默认
  • 保留 spring.session.timeout;勿改 spring.data.redis.* 连接键名
  • 排查 @Enable*HttpSession / @EnableRedisWebSession 是否导致 back off
  • 可选 migrator 诊断 → 用完删除
  • 验收:日志 + Redis namespace/key + 登录态
  • Hazelcast 移除 / Mongo 一句边界即可,不抢主线

按「换前缀 → 换 starter → 分清连接与 Session → 避开手写启用陷阱 → Redis 与登录态验收」改完,这类 Boot4 Session Redis 属性改名踩坑通常一次就能闭环,比在过滤器链里猜「是不是序列化问题」省事。

相关推荐
牧瀬クリスだ2 小时前
Redis五大数据类型全解析:从入门到实战
java·数据库·redis·后端·缓存
我不会插花弄玉2 小时前
5.Hash 【由浅入深-redis】
redis·算法·哈希算法
Java小生不才3 小时前
SPRING AI向量化
redis·spring ai
Lucis__14 小时前
Redis持久化机制解析
redis·缓存·操作系统·文件·非关系型数据库·1024程序员节
用户0942485680317 小时前
第7章:Redis有序集合 ZSet 实战:排行榜与延时任务
redis·架构·源码
码士集团小青18 小时前
面霸篇:高频 Java 基础问题(核心卷一)
linux·服务器·数据库·redis·缓存·1024程序员节
2301_322414280418 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis
乐茵lin18 小时前
Redis 持久化机制详解:RDB 与 AOF
redis·bootstrap·mybatis
一条泥憨鱼19 小时前
【Redis | 黑马点评】附近商铺功能源码解读
数据库·redis·缓存