admin管理员组文章数量:1794759
【BUG】Quartz启动时初始化定时器报错
问题
Quartz定时任务项目启动时,初始化定时器报错:
Based on configured schedule, the given trigger 'DEFAULT.TASK_82' will never fire.原因
定时任务表中存在执行时间大于当前时间的记录。
/** * 项目启动时,初始化定时器 */ @PostConstruct public void init(){ List<ScheduleJobEntity> scheduleJobList = this.list(); for(ScheduleJobEntity scheduleJob : scheduleJobList){ CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, scheduleJob.getJobId()); //如果不存在,则创建 if(cronTrigger == null) { ScheduleUtils.createScheduleJob(scheduler, scheduleJob); }else { ScheduleUtils.updateScheduleJob(scheduler, scheduleJob); } } }解决方式
1:项目启动前删除表(SCHEDULE_JOB)中的cron表达式有误的记录数据,项目启动成功; 2:在初始化定时器中添加对cron的检验,代码如下:
修改后初始化方法
/** * 项目启动时,初始化定时器 */ @PostConstruct public void init(){ List<ScheduleJobEntity> scheduleJobList = this.list(); for(ScheduleJobEntity scheduleJob : scheduleJobList){ CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, scheduleJob.getJobId()); //如果不存在,则创建 if(cronTrigger == null) { if(ScheduleUtils.isValidateCanDoExpression(scheduleJob.getCronExpression())){ //校验定时任务是否可以执行 ScheduleUtils.createScheduleJob(scheduler, scheduleJob); }else { //删除过期任务 ScheduleUtils.deleteScheduleJob(scheduler, scheduleJob.getJobId()); } }else { ScheduleUtils.updateScheduleJob(scheduler, scheduleJob); } } }isValidateCanDoExpression方法
/** * 校验cron表达式是否能执行 * @param cron * @return */ public static boolean isValidateCanDoExpression(String cron) { //先校验cron表达式格式是否正确 if(!isValidExpression(cron)) { return false; } CronTriggerImpl triggerImpl = new CronTriggerImpl(); try { triggerImpl.setCronExpression(cron); } catch (ParseException e) { // TODO Auto-generated catch block logger.info("定时任务cron校验【{}】,过期无法执行", cron); return false; } Date date = triggerImplputeFirstFireTime(null); return date != null && date.after(new Date()); }isValidExpression方法
/** * 校验cron表达式格式 * @param cron * @return */ public static boolean isValidExpression(String cron){ if(StringUtils.isEmpty(cron)){ return false; } return CronExpression.isValidExpression(cron); }修改后项目重新启动,不再报错了。
至此问题已经解决,文章若有不足之处,欢迎指正。
版权声明:本文标题:【BUG】Quartz启动时初始化定时器报错 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686476945a71839.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论