Java 石英不点火简单触发器
这应该是非常直接的,但我看不到任何工作正在执行。我在任务的execute()方法上有一个断点,没有线程到达那里。 我不知道怎么回事 工作Java 石英不点火简单触发器,java,cron,quartz-scheduler,Java,Cron,Quartz Scheduler,这应该是非常直接的,但我看不到任何工作正在执行。我在任务的execute()方法上有一个断点,没有线程到达那里。 我不知道怎么回事 工作 class Printer implements Job{ public Printer(){ System.out.println("created printer"); } @Override public void execute(JobExecutionContext context)
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文件,因此可能没有创建quartz的线程池。因此,在读入时,我使用StdSchedulerFactory将代码替换为以下内容:
DirectSchedulerFactory.getInstance().createVolatileScheduler(10);
Scheduler s = DirectSchedulerFactory.getInstance().getScheduler();
你猜怎么着?还是不走运。同样的效果。应用程序保持活动状态,不触发。我找到了解决方案:将定义作业的类(打印机)的可见性更改为public将使Quartz能够访问并运行它
public class Printer implements Job{ // just add 'public'!
public Printer(){
System.out.println("created printer");
}
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("hi" + context.getFireTime());
}
}
这是可以理解的,因为只有传递一个
才有可能,你的程序不是刚刚终止吗?不是,因为我不是故意关闭调度程序。你真的确认了你的应用程序不是在s.start()
之后才结束吗?我确认它保持活动状态。如果我将s.shutdown()作为最后一条指令,它将立即终止。我以前版本的测试程序包括10分钟的睡眠,然后是s.shutdown()。结果是该过程在10米后终止。但为了简单起见,我出版了一本没有。我试了两种方法。我认为这是预期的行为。另一个问题可能是承包商是否需要参数或不公开。多亏了你,我发现了我的问题。我也有同样的问题。我也觉得很奇怪/令人沮丧的是,根本没有给出错误消息…你让我开心!你有没有发现为什么Quartz没有成功解雇乔布斯?我面临着同样的问题,无法解释为什么,因为它在绝大多数情况下都有效。