SpringBoot 利用Timer 在指定時間2小時后執行任務
/** * @Description * @Author songwp * @Date 2022/8/5 12:51 * @Version 1.0.0 **/ @Component public class SalaryDetailTask { protected Logger log = LoggerFactory.getLogger(SalaryDetailTask.class); @Autowired protected ISalaryDetailServiceExtend salaryDetailServiceExtend; /** * @param uploadId * @Date 2022/8/5 13:51 * @Author songwp */ public void TaskServiceImplExtend(String uploadId) { Calendar myDate = Calendar.getInstance(); try { // 獲取工資詳情信息 SalaryDetail salaryDetail = salaryDetailServiceExtend.lambdaQuery().eq(SalaryDetail::getRefUploadRecordId, uploadId).eq(SalaryDetail::getSendStatus, 1).list().get(0); // 獲取發送時間 myDate.setTime(salaryDetail.getSendTime()); // 任務執行時間(發送時間的2小時之后) myDate.add(Calendar.HOUR, 2); Date afterOneMinute = myDate.getTime(); log.info("Scheduled(執行器)在: afterOneMinute {}",afterOneMinute); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { salaryDetailServiceExtend.lambdaUpdate() .set(SalaryDetail::getConfirmStatus,1) .eq(SalaryDetail::getConfirmStatus,0) .eq(SalaryDetail::getRefUploadRecordId,uploadId) .eq(SalaryDetail::getSendStatus,1) .update(); log.info("所屬上傳記錄id:uploadId:{}--下的工資條信息確認狀態,由 startStatus:{} --更新為--> endStatus :{} 成功!",uploadId,salaryDetail.getConfirmStatus(),1); } }, afterOneMinute); } catch (Exception e) { log.error("根據 uploadId:{} 未匹配到推送成功的工資詳情信息,任務執行出現異常!",uploadId,e); } } }
古今成大事者,不唯有超世之才,必有堅韌不拔之志!

浙公網安備 33010602011771號