如何在保持缓存自动配置的同时添加自定义@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缓存?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cache 缓存

Spring Cache 缓存

Spring Cache

HTML5 离线应用程序 接口实现离线数据缓存精心收藏

如何使用 Dockerfile自定义镜像?

高速缓存和主内存之间如何保持数据一致性