Apache Groovy 编写 retry 函数 | 详细教程

原文地址:Apache Groovy 编写 retry 函数 | 详细教程(永久地址,保存网址不迷路 🙃)

问题描述

在 Jenkins Pipeline 中,通过 retry 函数,能够对某个操作重复进行,直到成功。尤其是在网络请求中,我们更应该使用 retry 函数,以防止服务器负载过高而产生的临时失败。

但是,Jenkins Pipeline 的执行速度“较慢”(这是 Jenkins 的优化,防治对服务器产生过大压力),并且会大量产生 Pipeline Step 执行日志,因此我们希望通过 Groovy 实现 retry 函数,并加入一些特性。

该笔记将记录:在 Apache Groovy 中,如何实现自定义的 retry 函数,以及相关问题处理。

解决方案

代码 retry() 示例

def retry(int times = 5, Closure errorHandler = {e-> e.printStackTrace()}, Closure body) {
  int retries = -1
  while(times < 0 || ++retries <= times) {
    try {
      return body.call()
    } catch(e) {
      errorHandler.call(e)
    }        
  }
  throw new Exception("Failed after $times retries!")
}

这里的代码也许写的比较罗嗦,我们是为了赋予三个区间含义:
1)如果重试次数小于零,将无限重试;
2)如果重试次数等于零,将执行一次(而不重试)。
3)如果重试次数大于零,将执行 times + 1 次(即重试 times 次)

使用示例

retry(3) {
   errorProneOperation()
}

retry(2, {e-> e.printStackTrace()}) {
  errorProneOperation()
}

相关文章

「Groovy」- 找到调用该方法的类
「Groovy」- 将对象保存到文件,以及读取文件中对象

参考文献

java - Retry after Exception in Groovy - Stack Overflow
Pipeline: Basic Steps/retry

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值