問題は startTime の設定です。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 を削除すると、印刷メッセージがトリガーされません。そこに印刷メッセージがトリガーされます。