在Groovy中的异常后重试

Nic*_*zyk 13 ruby java groovy exception

在Ruby中,我可以写:

begin
  do_something # exception raised
rescue
   # handles error
   retry  # restart from beginning
end
Run Code Online (Sandbox Code Playgroud)

Groovy/Java中有类似的东西吗?

我找到了这个,但也许有更好的东西?

win*_*n74 18

您可以在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)
}
Run Code Online (Sandbox Code Playgroud)

(假设MultipleFailureException的定义类似于GPars的AsyncException)

然后在代码中,您可以使用此方法,如下所示.

retry {
   errorProneOperation()
}
Run Code Online (Sandbox Code Playgroud)

或者,具有不同数量的重试和错误处理行为:

retry(2, {e-> e.printStackTrace()}) {
  errorProneOperation()
}
Run Code Online (Sandbox Code Playgroud)