使用Spring Boot+Spring Cache时必须显式定义CacheManager Bean吗?
问题场景
已引入spring-boot-starter-cache依赖并添加@EnableCaching注解,但启动时仍报错:No qualifying bean of type 'org.springframework.cache.CacheManager' available。
排查与解决步骤
校验依赖正确性
确认Maven/Gradle中spring-boot-starter-cache依赖未被排除:
Maven依赖示例:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>可通过
mvn dependency:tree(Maven)或./gradlew dependencies(Gradle)命令分析依赖树,确认缓存相关包已正常引入。检查
@EnableCaching注解位置
确保该注解添加在Spring Boot启动类或被Spring组件扫描到的配置类上,否则缓存自动配置逻辑不会触发。排查自动配置是否被禁用
检查application.properties/application.yml中是否存在spring.autoconfigure.exclude配置,排除了org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,若有则移除该排除项。排查自定义缓存配置冲突
若项目中有自定义缓存配置类,需检查是否因手动配置Cache相关Bean但未正确生成CacheManager,导致默认自动配置被覆盖。可暂时注释自定义配置,测试默认配置是否生效。检查Spring Boot版本兼容性
若使用较旧版本的Spring Boot,可能存在自动配置bug,建议升级至稳定版本(如2.7.x或3.x系列)。手动配置默认CacheManager
若以上排查均无效,可显式配置ConcurrentMapCacheManager作为临时解决方案:@Configuration @EnableCaching public class CacheConfig { @Bean public CacheManager cacheManager() { return new ConcurrentMapCacheManager(); } }
内容的提问来源于stack exchange,提问作者SetNug

