Spring将缓存添加到现有的CacheManager bean

时间:2019-09-17 10:30:25

标签: java spring dependency-injection spring-bean spring-cache

我有一个依赖于库的应用程序。该应用程序可能具有也可能没有CacheManager类型的Bean。图书馆的内部厨房也使用缓存。因此,它必须使用应用程序的现有bean,或使用缓存A,B,C创建自己的一个。如果该库使用现有的bean,则必须使用高速缓存A,B,C丰富该bean。我到底该怎么做?

我已经尝试将以下代码添加到库中,用于“不存在时创建”部分

@Bean
@ConditionalOnMissingBean(CacheManager.class)
public CacheManager codPlusCacheManager() {
    SimpleCacheManager cacheManager = new SimpleCacheManager();
    cacheManager.setCaches(Arrays.asList(
        new ConcurrentMapCache("A"),
        new ConcurrentMapCache("B"),
        new ConcurrentMapCache("C")))
    return cacheManager;
}

如何丰富现有的bean?

2 个答案:

答案 0 :(得分:0)

您不必丰富现有产品,可以使两个bean并存。 为此,您可以使用spring缓存并确定什么是您的缓存管理器。 例如:

@Bean
@Qualifier("libCacheManager")
public JCacheCacheManager featureFlagsCacheManager() {
    // Details Omitted.
}

然后在您的可缓存方法上使用:

@Cacheable(cacheManager = "libCacheManager", cacheNames = "name")

答案 1 :(得分:-1)

根据setCaches()的{​​{3}},它需要一组缓存对象。请尝试以下方法来配置您的缓存管理器:

@Bean
@ConditionalOnMissingBean(CacheManager.class)
public CacheManager codPlusCacheManager() {
    SimpleCacheManager cacheManager = new SimpleCacheManager();
    Collection<Cache> caches = Arrays.asList(
        new ConcurrentMapCache("A"),
        new ConcurrentMapCache("B")
        new ConcurrentMapCache("C")

    ); 
    cacheManager.setCaches(caches);
    return cacheManager;
}