我希望能够读取包含一堆批处理文件(和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...
}
}
答案 0 :(得分:2)
在quartz 2中,您需要使用JobDataMap(存储在jobDetail中)将参数传递给execute方法。它将在context.getJobDetail()。getJobDataMap()
中提供答案 1 :(得分:0)
从我使用Quartz Scheduler或者更确切的JobBuilder开始,它以如此愚蠢的方式编写,它只接受Class对象作为参数。我无法找到将Job Object传递给构建器的方法。
这是一个非常糟糕的设计,导致将来至少在版本1.X中为Quartz编写通用解决方案时出现问题。