如何扩展默认的Spring Boot CacheManager配置

时间:2017-04-19 16:07:58

标签: java spring spring-boot caffeine

我在我的Web应用程序中使用Spring Boot缓存支持,并将Caffeine设置为缓存提供程序。

我的项目中有几个缓存,大多数都有常见的配置,但是对于两个特定的缓存,我需要设置不同的参数。

在我的application.properties我有类似的东西:

spring.cache.cache-names=a-cache,b-cache,c-cache, ...
spring.cache.caffeine.spec=maximumSize=200,expireAfterWrite=3600s

这适用于常见的缓存。然后我想用自定义参数扩展这个配置。

This post解释了如何通过@Configuration类配置缓存,但使用此方法我完全覆盖了常见配置。

我需要的是:

@Configuration
public class CacheConfiguration {

    @Autowired
    private CacheManager cacheManager;

    @Bean
    public CacheManager cacheManager(Ticker ticker) {
        CaffeineCache c1 = new CaffeineCache("my-custom-cache", Caffeine.newBuilder()
                       .expireAfterWrite(10, TimeUnit.MINUTES)
                       .maximumSize(400)
                       .build());

        // ...

        cacheManager.setCaches(Arrays.asList(..., c1, ... )); // here I'd like to add custom caches...
        return cacheManager;
    }

}

但是声明一个新的CacheManager bean,“原始”cacheManager没有自动装配......

有没有办法实现我需要的东西?

1 个答案:

答案 0 :(得分:0)

我利用CompositeCacheManager来处理这种情况。本质上,我创建了自定义配置的CaffeineCache,并将其放入SimpleCacheManager,然后使用具有默认设置的CaffeineCacheManager。我将两个缓存管理器都放入了CompositeCacheManager中,spring会先在我的SimpleCacheManager中查找匹配的缓存,如果找不到,它将在CaffeineCacheManager中查找。如果CaffeineCacheManager也没有匹配项,它将使用默认设置创建一个新的缓存。

config}

感谢https://medium.com/@d.lopez.j/configuring-multiple-ttl-caches-in-spring-boot-dinamically-75f4aa6809f3的灵感