如何将实例变量传递给Quartz作业?

jan*_*ith 25 java quartz-scheduler

我想知道如何在Quartz中外部传递一个实例变量?

下面是我想写的伪代码.如何将externalInstance传递给这个Job?

public class SimpleJob implements Job {
        @Override
        public void execute(JobExecutionContext context)
                throws JobExecutionException {

            float avg = externalInstance.calculateAvg();
        }
}
Run Code Online (Sandbox Code Playgroud)

Rip*_*ips 53

你可以把你的实例放在schedulerContext中.当你打算安排工作时,就在你可以做到这一点之前:

getScheduler().getContext().put("externalInstance", externalInstance);
Run Code Online (Sandbox Code Playgroud)

你的工作类如下:

public class SimpleJob implements Job {
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        SchedulerContext schedulerContext = null;
        try {
            schedulerContext = context.getScheduler().getContext();
        } catch (SchedulerException e1) {
            e1.printStackTrace();
        }
        ExternalInstance externalInstance =
            (ExternalInstance) schedulerContext.get("externalInstance");

        float avg = externalInstance.calculateAvg();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您使用Spring,您实际上可以使用spring的支持来注入整个applicationContext,就像在Link中回答一样


Vik*_*dor 9

在使用触发器调度作业时,您已经定义JobDataMap了添加到JobDetail.JobDetail对象将出现在JobExecutionContext传递给execute()您的方法中Job.所以,你应该找到一种方法来通过你的externalInstance传递JobDataMap.HTH.