我在我的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
没有自动装配......
有没有办法实现我需要的东西?
答案 0 :(得分:0)
我利用CompositeCacheManager来处理这种情况。本质上,我创建了自定义配置的CaffeineCache,并将其放入SimpleCacheManager,然后使用具有默认设置的CaffeineCacheManager。我将两个缓存管理器都放入了CompositeCacheManager中,spring会先在我的SimpleCacheManager中查找匹配的缓存,如果找不到,它将在CaffeineCacheManager中查找。如果CaffeineCacheManager也没有匹配项,它将使用默认设置创建一个新的缓存。
config}