Skip to content

fix: CacheConfig bean 返回类型改为 CustomRedisCacheManager 修复冷启动注入失败#123

Open
JasonYv wants to merge 1 commit into
1024-lab:masterfrom
JasonYv:fix/cache-manager-bean-type
Open

fix: CacheConfig bean 返回类型改为 CustomRedisCacheManager 修复冷启动注入失败#123
JasonYv wants to merge 1 commit into
1024-lab:masterfrom
JasonYv:fix/cache-manager-bean-type

Conversation

@JasonYv
Copy link
Copy Markdown

@JasonYv JasonYv commented May 21, 2026

背景

sa-baseCacheConfig#cacheManager()@Bean 声明缓存管理器时,返回类型写的是接口 CacheManager,但实际返回的是 CustomRedisCacheManagerRedisCacheManager 的子类)。

问题

业务代码中按 RedisCacheManager 类型注入该 bean 时:

  • IDE 热加载 / 增量编译(devtools、JRebel):bean 在容器里按实际对象 class 注册,按类型查 RedisCacheManager 能命中,所以问题被掩盖,长期没暴露。
  • 首次冷启动 / 全量重新编译:Spring 走静态类型分析路径,看到 @Bean 返回类型是 CacheManager,就拒绝匹配 RedisCacheManager,启动直接失败。

这是一个潜伏问题,只在冷启动时才会被引爆。

修复

@Bean 方法的返回类型从 CacheManager 改成 CustomRedisCacheManager,让 Spring 在静态分析阶段就识别该 bean 是 RedisCacheManager 的子类,冷热启动都能正常注入。

改动文件

  • smart-admin-api-java17-springboot3/sa-base/.../config/CacheConfig.java
  • smart-admin-api-java8-springboot2/sa-base/.../config/CacheConfig.java

顺手删除了不再使用的 import org.springframework.cache.CacheManager;

影响范围

仅修改 bean 声明的返回类型,运行时行为完全一致;不影响现有按 CacheManager 类型注入的代码。

@bean 方法返回 CacheManager 接口,冷启动时 Spring 走静态类型分析,
按 RedisCacheManager 类型注入会失败(IDE 热加载因按实际对象类型注册
能命中,所以问题被掩盖)。改为返回 CustomRedisCacheManager,冷热启动
均可正常注入。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant