以下内容将告诉spring
使用cachename" simpleCache"自动生成一个简单的ConcurrentHashMap
。
@Cachable("simpleCache")
public String simpleCache(String val) {
//...
}
@Cache("selfexpire")
public String selfexpireLookup(String val) {
}
问题:如果我只想添加一个具有已定义的自我过期时间的缓存,但又想依赖于弹簧自动配置的哈希映射来处理我使用的所有其他@Cacheable
该怎么办?
以下内容创建缓存:
@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");
}
答案 0 :(得分:1)
我认为您可以通过指定要使用的显式org.springframework.cache.CacheManager
来使用不同类型的缓存:
@Cachable(value = "simpleCache", cacheManager="simpleCacheManager")
public String getValueFromSimpleCache(String val) {
//...
}
不确定spring的默认CacheManager
的bean名称是什么。也许您需要明确声明:
@Bean
public CacheMananger simpleCacheManager() {
return new ConcurrentMapCacheManager();
}