如何在保持缓存自动配置的同时添加自定义@Cacheable缓存?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在保持缓存自动配置的同时添加自定义@Cacheable缓存?相关的知识,希望对你有一定的参考价值。
以下将告诉spring
使用cachename“simpleCache”自动生成一个简单的ConcurrentHashMap
。
@Cachable("simpleCache")
public String simpleCache(String val) {
//...
}
@Cache("selfexpire")
public String selfexpireLookup(String val) {
}
问题:如果我只想添加一个具有已定义的自我过期时间的缓存,但是想要依赖于我使用的所有其他@Cacheable
的spring autoconfigured hashmaps,该怎么办?
以下创建缓存:
@Bean
public CaffeineCache selfexpireCache() {
return new CaffeineCache("selfexpire",
Caffeine.newBuilder()
.maximumSize(100)
.expireAfterAccess(1, TimeUnit.HOURS)
.build());
}
但是:当我现在启动我的应用程序时,所有其他一次自动配置的缓存失败:
java.lang.IllegalArgumentException: Cannot find cache named 'simpleCache' for Builder
...只有显式配置的caffeing缓存有效。
那么,如何在显式添加自定义缓存的同时保留自动配置的缓存呢?
当然我可以手动添加这些简单的缓存,但我更喜欢spring自动配置它们:
@Bean
public ConcurrentMapCache simpleCache() {
return new ConcurrentMapCache("simpleCache");
}
答案
我认为您可以通过指定要使用的显式org.springframework.cache.CacheManager
来使用不同类型的缓存:
@Cachable(value = "simpleCache", cacheManager="simpleCacheManager")
public String getValueFromSimpleCache(String val) {
//...
}
不确定春天的默认CacheManager
的bean名称是什么。也许您需要明确声明它:
@Bean
public CacheMananger simpleCacheManager() {
return new ConcurrentMapCacheManager();
}
以上是关于如何在保持缓存自动配置的同时添加自定义@Cacheable缓存?的主要内容,如果未能解决你的问题,请参考以下文章