3

我想要做的是读取带有一堆批处理文件(和参数)的文件,并为每个条目创建一个石英作业。我知道我遗漏了一些明显的东西,但我似乎无法在谷歌的任何地方找到如何做到这一点。我发现的一切都表明,必须为每个无法从外部构建的工作编写一个新类。我似乎找不到如何创建可以传递给调度程序的类的实例。

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...
    }
}
4

2 回答 2

2

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

于 2013-11-14T12:10:53.740 回答
0

从我在 Quartz Scheduler 或者更确切地说是 JobBuilder 中获得的优质时间来看,它以如此愚蠢的方式编写,它只接受 Class 对象作为参数。我无法找到将 Job Object 传递给构建器的方法。

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

于 2016-01-27T14:37:35.723 回答