【发布时间】:2013-01-29 07:45:32
【问题描述】:
这应该很简单,但我没有看到正在执行的工作。我在任务的 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 文件,因此可能没有创建石英线程池。因此,如documentation 中所述,我将使用 StdSchedulerFactory 的代码替换为以下内容:
DirectSchedulerFactory.getInstance().createVolatileScheduler(10);
Scheduler s = DirectSchedulerFactory.getInstance().getScheduler();
你猜怎么着?还是没有运气。一样的效果。应用程序保持活动状态,触发不触发。
【问题讨论】:
-
你的程序不就终止了吗?
-
不,因为我没有关闭调度程序(故意)。
-
您是否确实确认您的应用程序不会简单地在
s.start()之后结束? -
我确认它还活着。如果我将 s.shutdown() 作为最后一条指令,它会立即终止。我的测试程序的早期版本包括十分钟的睡眠,然后是 s.shutdown()。效果是进程在 10m 后终止。但为了简单起见,我发表了没有。我测试了任何一种方式。我想这是预期的行为。
-
顺便说一句,对于阅读本文的任何人,即使您不提供quartz.properties 文件,Quartz 也会加载默认属性。查看文档here
标签: java cron quartz-scheduler