如何将作业对象实例传递给quartz调度程序

时间:2013-10-11 22:57:02

标签: java quartz-scheduler

我希望能够读取包含一堆批处理文件(和args)的文件,并为每个条目创建一个石英作业。我知道我错过了一些明显的东西,但我似乎无法在google上找到如何做到这一点。我发现的一切都说,必须为每个不能外部构建的工作编写新的类。我似乎无法找到如何创建一个类的实例,我可以将其传递给调度程序。

public class MyJob implements Job{
    private String[] jobArgs = null;

    public MyJob(String[] jobArgs){
        this.jobArgs = jobArgs;
    }

    public void execute(JobExecutionContext arg0) throws JobExecutionException{
        ExternalProcess ep - new ExternalProcess();
        try{
            ep.runExecutableCommand(jobargs);
        }catch(Exception e){...}
    }

}

public class JobScheduler {
    ...
    List<String[]> jobArgList = loadJobListFromDisk();
    List<MyJob> = new ArrayList<MyJob>();
    for(String[] jobArgs : jobList){
        MyJob myJob = new MyJob(jobArgs);
        // Is it possible to pass in a reference to an instance somehow
        // instead of letting the scheduler create the instance based on
        // the class definition?  I know this syntax doesn't work, but this
        // is the general idea of what I'm trying to do.
        JobDetail jobDetail = JobBuilder.newJob(myJob).withIdentity...
    }
}

2 个答案:

答案 0 :(得分:2)

在quartz 2中,您需要使用JobDataMap(存储在jobDetail中)将参数传递给execute方法。它将在context.getJobDetail()。getJobDataMap()

中提供

答案 1 :(得分:0)

从我使用Quartz Scheduler或者更确切的JobBuilder开始,它以如此愚蠢的方式编写,它只接受Class对象作为参数。我无法找到将Job Object传递给构建器的方法。

这是一个非常糟糕的设计,导致将来至少在版本1.X中为Quartz编写通用解决方案时出现问题。