如何在运行时创建新的JobDetail作业?

时间:2016-04-26 04:26:26

标签: java quartz-scheduler

我正在为客户端配置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;

但是怎么样?

1 个答案:

答案 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)