Tiger_JV 2015-09-01 07:55 采纳率: 0%
浏览 7892

Quartz 定时器动态修改执行时间修改后出现立即执行情况

问题描述:
Spring 启动时加载定时器 执行点为 0 0 12 * * ? * 也就是每天12点执行
在11点左右修改为 0 0 14 * * ? * 也就是让它每天14点执行。
在12点多后又重新修改为 0 0 12 * * ? * 此时定时器立即执行了。
想知道是什么原因?

修改定时器的代码如下:job.getJobExpression() 就是传入的修改的执行时间
/**
* @Title: modifyJobTime
* @Description: 修改任务的执行频率
* @param job
* @throws SchedulerException
* @throws ParseException
* @return void 返回类型
* @throws
*/
public void modifyJobTime(JobBean job) throws SchedulerException, ParseException
{
logger.info("进入修改定时任务方法。方法参数:" + job.getJobId()+","+job.getJobName()+","+job.getJobGroupName()+","+job.getJobExpression());
Scheduler scheduler = schedulerFactory.getScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(String.valueOf(job.getJobId()), job.getJobGroupName());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
if (trigger != null && !trigger.getCronExpression().equals(job.getJobExpression()))
{
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getJobExpression());
// 按新的cronExpression表达式重新构建trigger
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
// 按新的trigger重新设置job执行
scheduler.rescheduleJob(triggerKey, trigger);
}
else
{
logger.error("该任务不存在,jobName:" + job.getJobName() + ", jobGroupName:" + job.getJobGroupName());
}
logger.info("离开修改定时任务方法。");
}

  • 写回答

2条回答 默认 最新

  • Tiger_JV 2015-09-06 02:33
    关注

    问题已解决:CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getJobExpression()).withMisfireHandlingInstructionDoNothing();

    withMisfireHandlingInstructionDoNothing
    ——不触发立即执行
    ——等待下次Cron触发频率到达时刻开始按照Cron频率依次执行

    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站