我在SpringBootApplication中实现了缓存,如下所示
@SpringBootApplication
@EnableCaching
public class SampleApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SampleApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
这绝对是正常的。
但是要实现缓存,应该定义一个必需的CacheManager / Cacheprovider。 没有定义任何cacheManager,我的应用程序也正常工作。
是否有Spring定义的默认缓存管理器? Spring文档说Spring Boot自动配置一个合适的CacheManager。
那么,如果我们不定义CacheManager,它将使用什么?
答案 0 :(得分:4)
Spring Boot启动程序提供a simple cache provider,它将值存储在ConcurrentHashMap的实例中。这是缓存机制最简单的线程安全实现。
如果您的应用中存在@EnableCaching
注释,Spring Boot会检查类路径上可用的依赖项,并配置相应的CacheManager
。根据所选的提供商,可能需要一些其他配置。您可以在此答案的第一个链接中找到有关配置的所有信息。
答案 1 :(得分:0)
如果要(出于任何原因)明确定义最简单的缓存管理器(在后台使用ConcurrentHashMap),请执行以下操作:
@Bean
public CacheManager cacheManager() {
return new org.springframework.cache.concurrent.ConcurrentMapCacheManager();
}