从文档中,如果我们没有定义自己的CacheManager bean定义,Sping Boot 默认使用ConcurrentMapCacheManager作为CacheManager实现。但是我一直收到“没有类型为”org.springframework.cache.CacheManager“可用”的合格bean“错误,即使有spring-boot-starter-cache和@EnableCaching。
任何帮助都将不胜感激。
此致,
设置核
从文档中,如果我们没有定义自己的CacheManager bean定义,Sping Boot 默认使用ConcurrentMapCacheManager作为CacheManager实现。但是我一直收到“没有类型为”org.springframework.cache.CacheManager“可用”的合格bean“错误,即使有spring-boot-starter-cache和@EnableCaching。
任何帮助都将不胜感激。
此致,
设置核
1条答案
按热度按时间w1e3prcc1#
简单的说......不。
我怀疑您在(集成)测试时遇到了问题?如果是这样,那么您可能需要声明适当的“测试切片注解”,即
@AutoConfigureCache
;参见Javadoc。为了进行演示,我创建了一个简单的示例,其中test class包含在我的SO repository的module中,即使您的测试是
@SpringBootTest
,您也必须在配置中声明@AutoConfigureCache
注解(请参见此处)。正如Sping Boot 文档所述,Spring Boot的所有 * 自动配置 *(这是相当广泛的)可能有点多的测试。因此,没有一个Sping Boot 的 * 自动配置 * 是默认启用。因此,你必须显式地启用你想要的,或者,你可以声明你想要整个Spring启动的 * 自动配置 * 启用,方法是将
@AutoConfigureCache
注解声明替换为Sping Boot 的@EnableAutoConfiguration
注解。Sping Boot 将自动配置一个“Simple”缓存提供程序(即
ConcurrentMapCacheManager
,或者换句话说,由java.util.concurent.ConcurrentHashMap
支持的SpringCacheManager
实现;见此处),当没有其他缓存提供者实现(例如Redis)存在或显式声明时。然而, Boot * 自动配置 * 仅在您的SpringBoot应用程序是一个“应用程序”时有效,我已经展示了here。
当然,如果您的测试按照描述找到了您的
@SpringBootApplication
注解类(在classpath组件扫描中),那么它也将启用缓存,而无需任何显式注解,例如,甚至无需显式声明@AutoConfigureCache
测试切片注解。注:在我的示例中,我故意没有根据建议的结构打包源代码,因此,如果我将测试配置中的
@AutoConfigureCache
注解声明替换为@Import(SpringBootDefaultCachingApplication.class)
,并从应用程序类中注解掉此Assert,那么测试也将通过。以这种方式使用@Import
注解类似地工作,就好像测试类和应用类在同一个包中一样,或者应用类在相对于测试类的父包中。最后一个技巧...您可以始终启用Sping Boot 调试(参见Baeldung的blog),以查看在运行应用程序时,甚至在运行测试时应用了什么 * 自动配置 *。