如何在 运行 时间内创建新的 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)