@Cacheable и refreshAfterWrite - PullRequest
       15

@Cacheable и refreshAfterWrite

0 голосов
/ 28 сентября 2018

В настоящее время я использую абстракцию кеша весенней загрузки и кофеин с конфигом spring.cache.caffeine.spec=expireAfterWrite=2h,recordStats в качестве только конфигурации и метода, подобного этому:

@Cacheable(
        value = CacheConfig.PRODUCTS_CACHE_NAME
)
public List<ProductDetails> getProductsDetails(String language) {
    // long running remote request
    return products;
}

Для более упругого поведения я хочу, чтобы кэш продолжал работатьстарое значение, когда удаленный сервис недоступен.

Но конфигурация spring.cache.caffeine.spec=refreshAfterWrite=2h,recordStats приводит к исключению, сообщающему refreshAfterWrite requires a LoadingCache.

Я знаю, что мог бы реализовать бин CacheLoader сам.Но тогда мне пришлось бы вызывать кеш напрямую и потерять прозрачное поведение @ Cachable.

Я ищу следующее поведение:

  1. Cache MISS => loadзначение и возврат синхронно.

  2. Кэш HIT => значение обслуживания из кэша.

  3. Кэш HIT после порога обновления => обслуживать старое значение из кэшасинхронно и обновите значение в фоновом режиме.

  4. Бонус: кэшируйте HIT после того, как текущее значение старше, чем X => значение загрузки, и возвращайте синхронно.

Возможно ли такое поведение?

...