gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:22:14 25 4
gpt4 key购买 nike

以下内容将告诉spring自动生成一个简单的ConcurrentHashMap,其缓存名称为“simpleCache”。

@Cachable("simpleCache")
public String simpleCache(String val) {
//...
}

@Cache("selfexpire")
public String selfexpireLookup(String val) {

}

问题:如果我只想添加一个具有定义的自过期时间的缓存,但想要依赖 springs 自动配置的 HashMap 来处理我使用的所有其他 @Cacheable 该怎么办?

以下内容创建缓存:

@Bean
public CaffeineCache selfexpireCache() {
return new CaffeineCache("selfexpire",
Caffeine.newBuilder()
.maximumSize(100)
.expireAfterAccess(1, TimeUnit.HOURS)
.build());
}

但是:当我现在启动我的应用程序时,所有其他自动配置的缓存都会失败:

java.lang.IllegalArgumentException:无法为 Builder 找到名为“simpleCache”的缓存...只有显式配置的 caffeing 缓存才有效。

那么,如何在显式添加自定义缓存的同时保留自动配置的缓存?

当然,我可以手动添加这些简单的缓存,但我更喜欢 spring 自动配置它们:

@Bean
public ConcurrentMapCache simpleCache() {
return new ConcurrentMapCache("simpleCache");
}

最佳答案

我认为您可以通过指定要使用的显式org.springframework.cache.CacheManager来使用不同类型的缓存:

@Cachable(value = "simpleCache", cacheManager="simpleCacheManager")
public String getValueFromSimpleCache(String val) {
//...
}

不确定 spring 的默认 CacheManager 的 bean 名称是什么。也许您需要显式声明它:

@Bean
public CacheMananger simpleCacheManager() {
return new ConcurrentMapCacheManager();
}

关于java - 如何在保持缓存自动配置的同时添加自定义@Cacheable缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47883855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com