В 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, чтобы мы могли отключить его при необходимости?