У меня есть такой простой случай: в моем классе BCService я вызываю BCRepository.
@Component
public class BCService implements BCServiceApi {
public static final String CACHE_KEY = "name";
@Autowired
private BCRepository repository;
@Cacheable(value = "header", key = "#root.target.CACHE_KEY")
public String getHeader() {
return repository.getHeader();
}
}
В моем классе BCRepository я вызываю конечную точку, которая возвращает строку из внешнего сервиса.
ResponseEntity<String> response = restTemplate.exchange(url,HttpMethod.GET, new HttpEntity<>(headers), String.class);
return Objects.requireNonNull(response.getBody());
Я кеширую метод BCService, чтобы больше не делать этого. В моем файле ehcache.xml timeToIdleSeconds установлен на 60 секунд. Через 60 секунд я снова вызываю внешнюю службу для поиска изменений и их кеширования.
<cache name="header"
maxEntriesLocalHeap="10000"
maxEntriesLocalDisk="1000"
eternal="false"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="60" timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off">
<persistence strategy="localTempSwap" />
</cache>
У меня вопрос, как я могу заставить BCService.getHeader () по-прежнему возвращать последнюю кэшированную строку , если внешняя служба внезапно недоступна?