Вы можете создать свой собственный вспомогательный метод в 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)
}
(Предполагается, что определение MultipleFailureException аналогично AsyncException GPars )
тогда в коде вы можете использовать этот метод следующим образом.
retry {
errorProneOperation()
}
или с другим количеством повторных попыток и поведением обработки ошибок:
retry(2, {e-> e.printStackTrace()}) {
errorProneOperation()
}