我们在些项目的时候,有可能会遇到需要延迟执行的方法,或者代码块,这里我也碰到这个问题, 需要定时存入一些数据,而且还需要延时再次执行几次,直到某个条件不满足为止.
下面贴上的我的代码:
/**
* 定时存入(每天凌晨二点 开始执行存入操作 cron = ("0 0 2 * * ?")
* @throws AppException
*/
@Scheduled(cron = ("0 0 2 * * ?") )
public void startSaveDetail() throws AppException{
while(true){
//获取当前时间
Calendar time = Calendar.getInstance();
//每天七点停止存入
if(time.get(Calendar.HOUR_OF_DAY) <= ftpProperties.getStopSaveTime()){
//上传数据
int num = saveTokenDetail(ftpProperties.getSaveNumberOnce());
if(num == 0 ){
Timer timer = new Timer();
//延迟一个小时后执行
TimerTask task = new TimerTask(){
@Override
public void run() {
System.out.println("一小时后再次执行:");
startSaveDetail();
}
};
timer.schedule(task,1000*60*60);
break;
}
}else{
System.out.println("停止存入");
break;
}
}
}
上面就是使用到了 定时调用 , 我上面整个方法是使用springboot自带的定时执行功能, 定时为每天凌晨2点开始执行,执行后,当条件暂时不满足时, 使用Timer , 和 TimeTask 就把整个方法延迟一个小时后执行一次,最后当第一层条件不满足时,退出整个方法.