Spring Boot:覆盖CacheManager bean使与缓存相关的属性不起作用

时间:2019-06-24 09:10:04

标签: java spring spring-boot redis spring-cache

我有一个带有Redis缓存的Spring Boot 2应用程序。直到我重写CacheManager bean之前,它都运行良好。

问题:以下配置属性被忽略(我无法再关闭缓存):

spring.cache.type=none

尽管according to the documentation应该可以使用。

问题:如何使spring.cache.type=none工作?

有一种解决方法like this,但这远不是一个好的解决方案。

更多详细信息::我的配置如下:

@Configuration
public class CacheConfiguration {
    @Bean
    RedisCacheWriter redisCacheWriter(RedisConnectionFactory connectionFactory) {
        return RedisCacheWriter.lockingRedisCacheWriter(connectionFactory);
    }

    @Bean
    CacheManager cacheManager(RedisCacheWriter redisCacheWriter) {
        Map<String, RedisCacheConfiguration> ttlConfiguration = ...
        RedisCacheConfiguration defaultTtlConfiguration = ...
        return new RedisCacheManager(
                redisCacheWriter, defaultTtlConfiguration, ttlConfiguration
        );
    }
}

2 个答案:

答案 0 :(得分:1)

由于您自己创建了CacheManager,因此还必须检查spring.cache.type是否要关闭。

@Bean
@ConditionalOnExpression("${spring.cache.type} != 'none'")
CacheManager cacheManager(RedisCacheWriter redisCacheWriter) {

答案 1 :(得分:1)

内置的Spring Redis缓存配置位于org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration

上面有一个@Conditional(CacheCondition.class)。 此CacheCondition检查spring.cache.type属性的值。如果将其设置为“ NONE”,则整个配置(包括RedisCacheManager bean)都将不会加载。

现在,当您创建自己的配置时,您可以自行定义cacheManager,而无论spring.cache.type变量的值如何

因此,您可能应该放置一些条件值(它将读取spring.cache.type值或您的自定义条件)