spring boot 定時任務
阿新 • • 發佈:2020-08-17
/** * 定時任務 */ @Component @EnableScheduling public class DynamicScheduleTask implements SchedulingConfigurer { private static Logger logger = LoggerFactory.getLogger(DynamicScheduleTask.class); @Autowired private CreditCodeMstDao creditCodeMstDao; /** * 執行定時任務 * @param taskRegistrar */ @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.addTriggerTask( // 新增任務內容 () -> { logger.info("執行動態定時任務: " + LocalDateTime.now().toLocalTime()); }, // 設定執行週期 triggerContext -> { CreditCodeMst codeMst = new CreditCodeMst(); codeMst.setCdType(PublicEnums.cronType.planTask.getKey()); codeMst.setCdId(PublicEnums.cronType.planTask.getValue()); CreditCodeMst task = creditCodeMstDao.queryByPrimaryKey(codeMst); // 預設規則,防止定時失效 String cron = "0/5 * * * * ?"; // 格式校驗 if(task != null && CronExpression.isValidExpression(task.getCdName())) { // 動態配置 cron = task.getCdName(); }else { logger.error("定時任務表示式異常,使用預設配置: " + cron); } // 返回執行週期 return new CronTrigger(cron).nextExecutionTime(triggerContext); } ); } }