gpt4 book ai didi

java - Quartz CronTrigger 在错误的日期/时间执行作业

转载 作者:行者123 更新时间:2023-12-02 00:26:08 24 4
gpt4 key购买 nike

我使用以下 cron 表达式在每个星期五的指定时间执行作业(在下面的示例中为下午 1:13)。

0 13 13 ? * FRI

因此,预期的行为应该是,如果我在周五以外的任何一天初始化此触发器,那么它应该直到下周五才开始执行。但就我而言,即使我今天初始化了这个触发器(因为今天是星期三),它也会立即开始执行作业。

相关java源码:

CronTrigger cronTrigger = new CronTrigger("trigger_" + groupName, groupName, cronExpression);
cronTrigger.setStartTime(startDate); //startDate = 1-Mar-2012
cronTrigger.setEndTime(endDate); //endDate = 30-Apr-2012

最佳答案

您的问题是配置开始时间。 startTime 是指触发应该发生的时间。由于日期已过时,这会导致调度程序失火,并且默认行为是调度程序立即重新触发。

删除 setStartTime,默认行为是将 startTime 设置为当前时间,并且第一个触发时间将与开始时间之后的 cron 触发器匹配,因此周四。

我通过快速小测试来验证:

public class Test {
public static void main(String[] args) throws ParseException, SchedulerException {
String groupName = "group";
String cronExpression = "0 13 13 ? * THUR";

CronTrigger cronTrigger = new CronTrigger("trigger_" + groupName, groupName, cronExpression);
cronTrigger.setStartTime(new Date(0));
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail detail = new JobDetail("testJob", groupName, TestJob.class);
scheduler.scheduleJob(detail, cronTrigger);
scheduler.start();
try {
Thread.sleep(50001);
} catch (Exception ignore) {
}

}

public static class TestJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("TEST");
}
}
}

删除 setStartTime 时,我的打印消息不会触发。有了它,打印消息就会被触发。

关于java - Quartz CronTrigger 在错误的日期/时间执行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10007730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com