在 Groovy 中的异常之后重试
在 Ruby 中,我可以这样写:
begin
do_something # exception raised
rescue
# handles error
retry # restart from beginning
end
在Groovy/Java中也有类似的东西吗?
我发现了这个,但也许有更好的东西?
在 Ruby 中,我可以这样写:
begin
do_something # exception raised
rescue
# handles error
retry # restart from beginning
end
在Groovy/Java中也有类似的东西吗?
我发现了这个,但也许有更好的东西?
您可以在Groovy中构建自己的帮助器方法来封装此重试逻辑。
def retry(int times = 5, Closure errorHandler = {e-> log.warn(e.message,e)}
, Closure body) {
int retries = 0
def exceptions = []
while(retries++ < times) {
try {
return body.call()
} catch(e) {
exceptions << e
errorHandler.call(e)
}
}
throw new MultipleFailureException("Failed after $times retries", exceptions)
}
(假设多重故障异常的定义类似于GPars的AsyncException。)
然后在代码中,您可以按如下方式使用此方法。
retry {
errorProneOperation()
}
或者,使用不同次数的重试次数和错误处理行为:
retry(2, {e-> e.printStackTrace()}) {
errorProneOperation()
}
如今,人们会建议您使用 ScheduledExecutorService 来实现这种 try-catch-retry 功能,因为这种功能被认为已经过时,并且可能对性能不利。我本来想给你指出克莱图斯对此的一个很好的答案,但是我一辈子都找不到答案。如果我能把它挖出来,我会更新我的答案。Thread.sleep()
编辑:找到它:如何在一定时间后重试函数请求 希望这对您有所帮助。