gpt4 book ai didi

java - quartz 不触发简单触发器

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:20 25 4
gpt4 key购买 nike

这应该很简单,但我没有看到任何作业正在执行。我在任务的 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 文件,所以可能从未创建过 quartz 的线程池。因此,如 documentation 中所述,我将使用 StdSchedulerFactory 的代码替换为以下代码:

DirectSchedulerFactory.getInstance().createVolatileScheduler(10);
Scheduler s = DirectSchedulerFactory.getInstance().getScheduler();

你猜怎么着?仍然没有运气。一样一样的效果。应用程序保持 Activity 状态,触发而不是触发。

最佳答案

我找到了解决方案:将定义作业 (Printer) 的类的可见性更改为 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());
}

}

这是可以理解的,因为只能传递 <? extends Job>.class到调度程序(该死的 hell ,为什么??)而不是 - 例如 - 匿名对象。

话虽如此,我发现 Quartz 在没有一条错误消息的情况下默默地失败触发作业的方式真的很令人沮丧。

关于java - quartz 不触发简单触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14859044/

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