java定时任务中,如何实现,定时任务的内容执行失败,过一分钟再执行一次,直到执行成功
代码展示:
public static void main(String[] args) {
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(() -> {
try {
System.out.println(new Date() + "业务代码");
}catch (Exception e){
e.printStackTrace();
}
},60,10, TimeUnit.SECONDS);
}
代码说明:
1.ScheduledExecutorService是一个线程池,用来在指定延时之后执行或者以固定的频率周期性的执行提交的任务
2.方法说明scheduleAtFixedRate与scheduleWithFixedDelay的区别
scheduleAtFixedRate:这个是按照period(定时时间)来的,不管任务是否完成
scheduleWithFixedDelay:是按照上个任务执行完,然后延迟delay的时间
回调一下不就行了
执行失败就再运行定时任务啊
丢到mq做延时任务
提交一个定时任务,然后catch业务处理逻辑,如果失败,就重新提交一个定时任务。
//在循环体内调用执行类,并依据执行状态决定是否需要重新执行
//通过Thread.sleep设计再次执行的延时时长
//需要考虑设置重新执行次数,防止由于一直执行不成功的问题导致死循环
如有帮助请采纳
public static void main(String[] args) {
TimerTask task = new TimerTask (){
public void run() {
boolean tag = true;
//在循环体内调用执行类,并依据执行状态决定是否需要重新执行
//通过Thread.sleep设计再次执行的延时时长
//需要考虑设置重新执行次数,防止由于一直执行不成功的问题导致死循环
while(tag){
try{
//调用执行类
boolean s = xxxClass.yyym();
if( s){
return;
}
Thread.sleep(休眠时间);
}catch (Exception ex){
//依据异常类型判别是否需要重新执行
tag = false;
}
}
}
};
}
数据弄个状态,比如成功是SUCCESS,初始是INIT,失败是FAIL,筛的时候状态不是SUCCESS的就跑定时任务
示例SQL
select * from DATA where status in ('INIT','FAIL');
执行成功以后,把相应数据的DATA改成SUCCESS就可以了