我正在为客户端配置Quartz(非服务器)。如果我需要创建一个新的JobDetail job
,我会执行以下操作
JobDetail job = JobBuilder.newJob(TestJob.class)
.withIdentity("dummyJobName", "group1").build();
Trigger trigger = . .
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
最初我以为我会将一个类的对象提供给newJob
。
但newJob
方法将类作为参数(不是类的实例)。 JobBuilder org.quartz.JobBuilder.newJob(Class<? extends Job> jobClass)
我无法在运行时创建新类。至少这不是有效的。
那么如何在运行时添加新的JobDetail job
?
TestJob
类应该是抽象的,以便我可以在运行时自定义它。我在这里很困惑
stackoverflow上有类似的问题。所以看来&#34; Quartz调度程序的JobFactory API通过自定义类加载器加载作业类,这将允许您真正动态地添加作业&#34;
但是怎么样?答案 0 :(得分:1)
除非您将对象序列化(不建议这样做),否则无法直接从对象创建JobDetail
。您可以做的是创建HashMap
并将所有数据添加到其中并执行以下操作。
Map<String, Serializable> jobData = Maps.newHashMap();
jobData.put("yourkey", "youdata");
...
JobDetail job = newJob(TestJob.class).usingJobData(jobData)
.build();
//build your trigger
scheduler.scheduleJob(job, trigger)