@Cacheable 创建的缓存的单独设置

Individual settings for caches created by @Cacheable

因此 Spring 决定放弃 Guava 并引入 Caffeine 缓存支持。感觉支持很有限

使用缓存最简单的方法是使用@Cacheable 注释。一个非常常见的用例是肯定有多个具有不同设置的缓存(例如 long/short lived)。

我不知道该怎么做。事实上,我认为当前的实现是不可能的,这真的让我感到惊讶。

CaffeineCacheManager被Spring用来动态创建缓存。它有几种设置 CaffeineCacheLoaderCaffeineSpec 的方法,您可以在其中设置缓存属性。但是,这随后将用于所有创建的缓存,我没有看到只为一个缓存设置属性的方法。

我是不是漏掉了什么?

我现在是这样解决的。我创建了一个问题来使这更容易 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 class中:

@Bean
public CacheManager cacheManager() {
    CustomCaffeineCacheManager caffeineCacheManager = new CustomCaffeineCacheManager();
    caffeineCacheManager.addCache("customCache", Caffeine.newBuilder()
            .expireAfterWrite(2, TimeUnit.MINUTES)
            .maximumSize(5_000).build());
    return caffeineCacheManager;
}