常见的流程如下:
目前遇到的大多数情况是按照这个流程执行的。。
那么,我们要怎么样去封装会比较舒服呢。。我是用JAVA的,接下来的示例为java代码。。
这里先抛出两个类:Timer ,TimerTask,一个方法:schedule(..)。相信大家看名字都知道是干嘛的。
- 先封装我们的业务处理
/**
* 一般为IO处理
*
* @param param1
* @param param2
* @return
*/
public boolean ioMethod(int param1, String param2) {
if ("111".equals(param2 + param1)) {
return false;
}
return true;
}
2. 封装我们的TimeTask:
/**
* 创建业务处理的任务
*
* @param param1
* @param param2
* @return
*/
public TimerTask buildBusinessTimerTask(int num, int param1, String param2) {
return new TimerTask() {
@Override
public void run() {
//TODO 业务处理
boolean result = ioMethod(param1, param2);
if (!result) { //失败重试
doSchedule(num, param1, param2);
return;
}
//TODO 成功处理
}
};
}
...完整的代码:
import java.util.Timer;
import java.util.TimerTask;
/**
* @author: KEN
* @since: 2019-09-27
**/
public class TestTimerTask {
/**
* 一般为IO处理
*
* @param param1
* @param param2
* @return
*/
public boolean ioMethod(int param1, String param2) {
if ("111".equals(param2 + param1)) {
return false;
}
return true;
}
/**
* 创建业务处理的任务
*
* @param param1
* @param param2
* @return
*/
public TimerTask buildBusinessTimerTask(int num, int param1, String param2) {
return new TimerTask() {
@Override
public void run() {
//TODO 业务处理
boolean result = ioMethod(param1, param2);
if (!result) { //失败重试
doSchedule(num, param1, param2);
return;
}
//TODO 成功处理
}
};
}
/**
* 暴露给外界调用的功能方法:处理xxx逻辑
*
* @param parm1
* @param param2
* @return
*/
public void doSchedule(int num, int parm1, String param2) {
System.out.println("第" + (num + 1) + "次执行任务失败");
if (num > 5) { //大于自定义的阀值,则停止
//TODO 做记录
return;
}
Timer timer = new Timer();
TimerTask timerTask = buildBusinessTimerTask(num + 1, parm1, param2);
//10秒后重试
timer.schedule(timerTask, 10 * 1000); //自定义一个延时时间
}
/**
* 暴露给外界调用的功能方法:处理xxx逻辑
*
* @param parm1
* @param param2
* @return
*/
public boolean doBusinessTimer(int parm1, String param2) {
TimerTask timerTask = buildBusinessTimerTask(0, parm1, param2);
timerTask.run();
return true;
}
}