Spring Boot: переопределение компонента CacheManager делает свойства, связанные с кэшем, не работающими - PullRequest
0 голосов
/ 24 июня 2019

У меня есть приложение Spring Boot 2 с кэшем Redis.Это работало очень хорошо, пока я не переопределил бин CacheManager.

Проблема: Следующее свойство конфигурации игнорируется (я больше не могу отключить кэширование):

spring.cache.type=none

Хотя согласно документации это должно работать.

Вопрос: Как заставить spring.cache.type=none работать?

Существует обходной путь , подобный этому , но это далеко не хорошее решение.

Подробнее: Вот как выглядит моя конфигурациякак:

@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 ]

1 голос
/ 24 июня 2019

A Конфигурация Spring Redis Cache находится в org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration

На нем есть @Conditional(CacheCondition.class). Это CacheCondition проверяет значение свойства spring.cache.type. Если для него задано значение «НЕТ», вся конфигурация, включая компонент RedisCacheManager, не будет загружаться вообще.

Теперь, когда вы создали свою собственную конфигурацию, в которой вы сами определяете cacheManager, она загружается независимо от значения spring.cache.type variable

Таким образом, вам, вероятно, следует указать некоторое условное значение (которое будет читать значение spring.cache.type или ваше пользовательское условие)

1 голос
/ 24 июня 2019

Поскольку вы сами создаете CacheManager, вы также должны проверить spring.cache.type, хотите ли вы включить его.

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