我有一个简单的例子:在我的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类中,我调用了一个从外部服务返回String的端点。
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()仍返回最后缓存的字符串?