我使用jcabi-aspects重试与我的URL http://xxxxxx:8080/hello的连接,直到连接回来。如你所知,jcabi的@RetryOnFailure有两个字段尝试和延迟。
我想在jcabi @ RetryOnFailure上执行尝试(12)=到期时间(1分钟= 60000毫秒)/延迟(5秒= 5000毫秒)等操作。我该怎么办?代码段如下所示。
@RetryOnFailure(attempts = 12, delay = 5)
public String load(URL url) {
return url.openConnection().getContent();
}
答案 0 :(得分:1)
您选择的库(jcabi
)没有此功能。但幸运的是,已经提取了Spring-Batch中非常方便的RetryPolicies(因此您可以单独使用它们,而无需批处理):
您可以使用的许多类之一是TimeoutRetryPolicy:
RetryTemplate template = new RetryTemplate();
TimeoutRetryPolicy policy = new TimeoutRetryPolicy();
policy.setTimeout(30000L);
template.setRetryPolicy(policy);
Foo result = template.execute(new RetryCallback<Foo>() {
public Foo doWithRetry(RetryContext context) {
// Do stuff that might fail, e.g. webservice operation
return result;
}
});
整个spring-retry项目非常易于使用且功能齐全,如backOffPolicies,听众等。
答案 1 :(得分:1)
您可以组合两个注释:
@Timeable(unit = TimeUnit.MINUTE, limit = 1)
@RetryOnFailure(attempts = Integer.MAX_VALUE, delay = 5)
public String load(URL url) {
return url.openConnection().getContent();
}
@RetryOnFailure
会永远重试,但@Timeable
会在一分钟内停止播放。