如何在保持缓存自动配置的同时添加自定义@Cacheable缓存?

时间:2017-12-19 09:33:45

标签: java spring caching

以下内容将告诉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");
}

1 个答案:

答案 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();
}