Spring Boot: поддерживаемые поставщики кэша

Абстракция кэша не обеспечивает фактическое хранилище и использует абстракцию, материализованную интерфейсами org.springframework.cache.Cache и org.springframework.cache.CacheManager.

Если вы не определили bean-компонент типа CacheManager или CacheResolver с именем cacheResolver, Spring Boot пытается обнаружить следующих поставщиков (в указанном порядке):

  • Generic (Общий)
  • JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, и другие)
  • EhCache 2.x
  • Hazelcast
  • Infinispan
  • Couchbase
  • Redis
  • Caffeine
  • Simple (простой)

Также возможно принудительно установить определенный поставщик кэша, установив свойство spring.cache.type. Используйте это свойство, если вам нужно полностью отключить кэширование в определенной среде (например, в тестах).

Используйте spring-boot-starter-cache стартер для быстрого добавления основных зависимостей кэширования. Стартер приносит spring-context-support. Если вы добавляете зависимости вручную, вы должны включить поддержку spring-context-support, чтобы использовать поддержку JCache, EhCache 2.x или Caffeine.

Если CacheManager автоматически конфигурируется Spring Boot, вы можете дополнительно настроить его конфигурацию до полной инициализации, предоставив компонент, реализующий интерфейс CacheManagerCustomizer. В следующем примере устанавливается флаг, указывающий, что нулевые значения должны быть переданы базовой карте:

@Bean
public CacheManagerCustomizer<ConcurrentMapCacheManager> cacheManagerCustomizer() {
    return new CacheManagerCustomizer<ConcurrentMapCacheManager>() {
        @Override
        public void customize(ConcurrentMapCacheManager cacheManager) {
            cacheManager.setAllowNullValues(false);
        }
    };
}

В предыдущем примере ожидается автоматически настроенный ConcurrentMapCacheManager. Если это не так (либо вы указали свою собственную конфигурацию, либо другой поставщик кэша был автоматически настроен), настройщик (customizer) вообще не вызывается. У вас может быть столько настройщиков, сколько вы хотите, и вы также можете упорядочить их, используя @Order или Ordered.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки