将@Cacheable与@Recover一起使用时,方法结果未缓存

时间:2019-04-15 19:26:51

标签: java spring

我有一个@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”将仅打印一次,但是实际上每次方法被调用。

0 个答案:

没有答案