Как отключить кэш Redis с помощью Spring Boot? - PullRequest
1 голос
/ 09 мая 2019

В Spring Boot 2.1 я определяю bean-компонент RedisCacheManager в файле конфигурации с конфигурацией Java.Все работает правильно, но я бы хотел иногда отключить его, например, в тестах.Spring Boot предоставляет spring.cache.type=NONE для отключения кэширования, согласно этой документации .Однако это свойство не будет работать, потому что я уже определил CacheManager, и поэтому Spring Boot не будет настраивать NoOpCacheManager, который мне нужен (там есть @ConditionalOnMissingBean(CacheManager.class) на NoOpCacheConfiguration, который имеет более низкий приоритет, чем RedisCacheConfiguration).

При определении кэшей, независимо от поставщика (для intance Caffeine), мы обычно определяем их как bean-компоненты, которые впоследствии автоматически конфигурируются Spring Boot в SimpleCacheManager.Например,

    @Bean
    public Cache myCache() {
        return new CaffeineCache(
                "my-cache",
                Caffeine.newBuilder()
                        .maximumSize(10)
                        .build());
    }

К сожалению, это невозможно с Redis, поскольку его реализация Cache, RedisCache, не является общедоступной.

Еще одна вещь, которую мы хотели бы сделать, - определитьbean CacheManagerCustomizer<?>, например, с кофеином

    @Bean
    public CacheManagerCustomizer<CaffeineCacheManager> caffeineCacheManager() {
        return cacheManager -> cacheManager
                .setCaffeine(Caffeine.newBuilder()
                        .expireAfterWrite(1, TimeUnit.MINUTES));
    }

Опять же, это невозможно с Redis, так как RedisCacheManager является неизменным .

Так что единственное правильное решениесейчас стоит создать наш собственный RedisCacheManager, но это не позволяет использовать spring.cache.type: NONE.

Так вот мой вопрос.Каков наилучший способ настроить кэш Redis с помощью Spring Boot, чтобы мы могли отключить его при необходимости?

1 Ответ

0 голосов
/ 09 мая 2019

исключить атрибут аннотации @SpringBootApplication, что-то вроде: @SpringBootApplication( exclude = { RedisAutoConfiguration.class } )

и набор: spring.data.redis.repositories.enabled=false

...