使用Quartz-scheduler在Jobs中的自定义对象参数

我正在测试Quartz来安排工作。 但是,该作业包含3个不可序列化的参数。

我在下面创建了一个示例应用程序,指示我如何实现该function。 有谁知道如何使用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();