这应该很简单,但我没有看到正在执行的工作。我在任务的 execute() 方法上有一个断点,没有线程到达那里。我不明白出了什么问题。
工作
class Printer implements Job{
public Printer(){
System.out.println("created printer");
}
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("hi" + context.getFireTime());
}
}
主要班
class MyClass {
public static void main(String[] args) throws Throwable {
Scheduler s = StdSchedulerFactory.getDefaultScheduler();
JobDetail job = newJob(Printer.class).build();
CronTrigger trigger =
newTrigger()
.withIdentity("a", "t")
.withSchedule(cronSchedule("0/5 * * * * ?").inTimeZone(TimeZone.getDefault()))
.forJob(job).build();
s.scheduleJob(job, trigger);
// This prints the right date!
System.out.println(trigger.getNextFireTime());
s.start();
}
}
编辑:我发现我没有quartz.property 文件,因此有可能从未创建石英的线程池。因此,如文档中所述,我将使用 StdSchedulerFactory 的代码替换为以下内容:
DirectSchedulerFactory.getInstance().createVolatileScheduler(10);
Scheduler s = DirectSchedulerFactory.getInstance().getScheduler();
你猜怎么了?还是没有运气。一样的效果。应用程序保持活动状态,触发不触发。