gpt4 book ai didi

java - 在quartz中运行嵌套作业时遇到问题

转载 作者:行者123 更新时间:2023-12-01 13:15:58 25 4
gpt4 key购买 nike

我正在使用 Quartz 1.8 编写一些每天/每周/每月运行作业的代码。当该作业运行时,它应该创建一个嵌套作业。但出于某种原因,嵌套的 JobDetail 和 Trigger 都不会在数据库中包含条目,也不会运行。

这是我正在使用的示例:

public class QuartzSSCCE {
private static Logger LOG = Logger.getLogger(QuartzSSCCE.class);
private static long counter = 0L;
private static Scheduler scheduler;

public void scheduleOuterJob(){
try{
LOG.info("About to try to schedule OuterJob");
CronTrigger ct = new CronTrigger("OuterJobTrigger" + counter++, "OuterJobGroup", "30 * * ? * *");
ct.setStartTime((new DateTime(new Date())).plusSeconds(3).toDate());
DateTime endTime = new DateTime(new Date());
endTime = endTime.plusMinutes(5);
ct.setEndTime(endTime.toDate());

JobDetail jd = new JobDetail("OuterJobDetail" + counter++, "OuterJobGroup", OuterJob.class);

scheduler.scheduleJob(jd, ct);
} catch (Exception e){
LOG.fatal("something went wrong while scheduling the outer job", e);
}
}

public static class OuterJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
try{
LOG.info("running OuterJob");
//Trigger trigger = TriggerUtils.makeImmediateTrigger("InnerTriggerName" + counter++, 1, 1);
SimpleTrigger simpleTrigger = new SimpleTrigger(
"InnerTriggerName" + counter++,
"InnerTriggerGroup",
(new DateTime(new Date())).plusSeconds(10).toDate(),
(new DateTime(new Date()).plusSeconds(50)).toDate(),
1,
1000
);
JobDetail jd = new JobDetail("InnerJobDetail" + counter++, "InnerJobGroup", InnerJob.class);
scheduler.scheduleJob(jd, simpleTrigger);
} catch (Exception e){
LOG.fatal("something went wrong while scheduling the inner job", e);
}
}
}

public static class InnerJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
LOG.info("InnerJob is running. The time at the beep is: " + new Date());
}
}

public void setScheduler(Scheduler scheduler) {
QuartzSSCCE.scheduler = scheduler;
}
}

此类从 SchedulerFactoryBean 获取 Scheduler 实例。在代码的其他地方,我实例化了 QuartzSSCCE 的实例,如下所示:

QuartzSSCCE quartzSSCCE = new QuartzSSCCE();
quartzSSCCE.scheduleOuterJob();

我最终在日志中看到“关于尝试安排 OuterJob”和“运行 OuterJob”的条目,但似乎 InnerJob 从未运行。我尝试使用从调用 TriggerUtils.makeImmediateTrigger() 返回的触发器以及 SimpleTrigger 来实现此操作。

为什么我的 InnerJob 无法运行?

最佳答案

首先,我的英语很差!

Quartz 使用反射来创建作业实例,如代码所示:

JobDetail jd = new JobDetail("InnerJobDetail" + counter++, "InnerJobGroup", InnerJob.class);

但是嵌套类不能直接通过反射创建实例,因此 InnerJob 不会被触发。

关于java - 在quartz中运行嵌套作业时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22468236/

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