В настоящее время я использую абстракцию кеша весенней загрузки и кофеин с конфигом 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.
Я ищу следующее поведение:
Cache MISS => loadзначение и возврат синхронно.
Кэш HIT => значение обслуживания из кэша.
Кэш HIT после порога обновления => обслуживать старое значение из кэшасинхронно и обновите значение в фоновом режиме.
Бонус: кэшируйте HIT после того, как текущее значение старше, чем X => значение загрузки, и возвращайте синхронно.
Возможно ли такое поведение?