[英]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.