簡體   English   中英

使用Quartz-Scheduler的Jobs中的自定義對象參數

[英]Custom Object parameters within Jobs using Quartz-scheduler

我正在測試Quartz以安排工作。 但是,該作業包含3個不可序列化的參數。

我在下面創建了一個示例應用程序,指示我如何實現功能。 有誰知道如何使用Quartz將自定義對象用作參數?

下面是安排工作的觸發器,我評論了給我問題的領域。

public class Trigger {

public void run() throws Exception {

    SchedulerFactory sf = new StdSchedulerFactory();
    Scheduler sched = sf.getScheduler();
    Date startTime = DateBuilder.nextGivenSecondDate(null, 15);


    JobDetail job = newJob(SimpleJob.class)
            .withIdentity("job6", "group1")
            .build();

    SimpleTrigger trigger = newTrigger()
            .withIdentity("trigger6", "group1")
            .startAt(startTime)
            .withSchedule(simpleSchedule()
                    .withIntervalInSeconds(60)
                    .repeatForever())
            .build();

    Date ft = sched.scheduleJob(job, trigger);

    TestObject testObject = new TestObject();

    // This is the part giving trouble!
    job.getJobDataMap().put(SimpleJob.test,testObject);

    sched.start();
}

}

這是我要安排的工作。

public class SimpleJob implements Job {

public static final TestObject test = null;

public SimpleJob() {

}

public void execute(JobExecutionContext context) throws JobExecutionException {

    test.saySomething();
}

}

最后是TestObject類。

public class TestObject {

public TestObject() {

}

public void saySomething() {

    System.out.println("Test Object initialized");
}

}

請注意,我只是在尋找一種讓Quartz允許非序列化對象用作參數的方法(請不要對上面執行的實際任務或工作發表評論)

我也嘗試過為TestObject實現Serializable接口,這並不令人高興。

任何幫助將不勝感激。 謝謝。

實現自己的JobFactory 它將自定義基礎Job注入所需的任何屬性。

class MyJobFactory extends SimpleJobFactory {
    @Override
    public Job newJob(TriggerFiredBundle bundle, Scheduler Scheduler) throws SchedulerException {
        SimpleJob job = (SimpleJob) super.newJob(bundle, Scheduler);
        job.setTestObject(testObject);
        return job;
    }
}

您仍然需要使用JobDetails來通知您的作業類別,並且需要修改調度程序以使用工廠。

Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.setJobFactory(new MyJobFactory());
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM