@Cacheable

因此,Spring决定放弃Guava并引入咖啡因缓存支持。我感觉支持非常有限。

使用缓存的最简单方法是使用@Cacheable批注。一个相当普遍的用例是,一定要有多个具有不同设置(例如长寿命/短寿命)的缓存。

我无法弄清楚该怎么做。实际上,我认为当前的实现是不可能的,这确实让我感到惊讶。

caffeineCacheManager被Spring用于动态创建缓存。它有几种方法可以设置caffeineCacheLoadercaffeineSpec,您可以在其中设置缓存属性。但是,然后将其用于所有已创建的缓存,但我没有看到仅为一个缓存设置属性的方法。

我在这里想念任何东西吗?

iCMS 回答:@Cacheable

我现在这样解决了。我创建了一个问题来简化此操作here

public class CustomCaffeineCacheManager extends CaffeineCacheManager {

    private Map<String,Cache> preDefinedCaches = new ConcurrentHashMap<>();

    public void addCache(String name,Cache cache) {
        preDefinedCaches.put(name,cache);
    }

    @Override
    protected Cache<Object,Object> createNativeCaffeineCache(String name) {
        return preDefinedCaches.getOrDefault(name,super.createNativeCaffeineCache(name));
    }
}

在@Configuration类中:

@Bean
public CacheManager cacheManager() {
    CustomCaffeineCacheManager caffeineCacheManager = new CustomCaffeineCacheManager();
    caffeineCacheManager.addCache("customCache",Caffeine.newBuilder()
            .expireAfterWrite(2,TimeUnit.MINUTES)
            .maximumSize(5_000).build());
    return caffeineCacheManager;
}
本文链接:https://www.f2er.com/2164968.html

大家都在问