我有一个@Retryable方法,其结果正在使用@Cacheable进行缓存并在ehcache.xml中进行配置。此方法还具有一种用@Recover注释的恢复方法。我想缓存这两种方法的结果,但是@Recover方法似乎没有被缓存。
@Cacheable("foo")
@Retryable(value = { HttpClientErrorException.class })
public String foo(String x) {
logger.info("Foo");
throw new HttpClientErrorException();
}
@Cacheable(value="recoverFoo", key="{ #root.methodName, #x}")
@Recover
public String recoverFoo(HttpClientErrorException ex, String x) {
logger.info("Recover Foo");
return x;
}
在我的ehcache.xml中,我有:
<cache name="foo" maxEntriesLocalHeap="2000"
timeToLiveSeconds="600">
</cache>
<cache name="recoverFoo" maxEntriesLocalHeap="2000"
timeToLiveSeconds="600">
</cache>
我期望将对恢复方法进行缓存,并且foo在缓存过期前的10分钟内多次失败,“恢复Foo”将仅打印一次,但是实际上每次方法被调用。