如何在 运行 时间内创建新的 JobDetail 作业?
How to create new JobDetail job in the run time?
我正在为客户端(而非服务器)配置 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);
最初我以为我会把一个 class 的对象提供给 newJob
。
但是 newJob
方法将 class 作为参数(不是 class 的实例)。 JobBuilder org.quartz.JobBuilder.newJob(Class<? extends Job> jobClass)
我无法在 运行 时间内创建新的 class。这样至少效率不高。
那么如何在 运行 时间添加新的 JobDetail job
呢?
TestJob
class 是否应该是抽象的,以便我可以在 运行 时间自定义它。我在这里很困惑
Whosebug 上也有类似的问题。所以看起来“Quartz 调度程序的 JobFactory API 通过自定义 class-loader 加载作业 classes,这将允许您真正动态地添加作业“
但是怎么办?
除非序列化对象,否则不能直接从对象创建 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)
我正在为客户端(而非服务器)配置 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);
最初我以为我会把一个 class 的对象提供给 newJob
。
但是 newJob
方法将 class 作为参数(不是 class 的实例)。 JobBuilder org.quartz.JobBuilder.newJob(Class<? extends Job> jobClass)
我无法在 运行 时间内创建新的 class。这样至少效率不高。
那么如何在 运行 时间添加新的 JobDetail job
呢?
TestJob
class 是否应该是抽象的,以便我可以在 运行 时间自定义它。我在这里很困惑
Whosebug 上也有类似的问题。所以看起来“Quartz 调度程序的 JobFactory API 通过自定义 class-loader 加载作业 classes,这将允许您真正动态地添加作业“
但是怎么办?
除非序列化对象,否则不能直接从对象创建 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)