我正在测试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接口,并没有快乐 .
任何帮助将不胜感激 . 谢谢 .
1 回答
实现自己的JobFactory . 它将自定义注入您需要的任何属性的底层Job .
您仍然需要使用JobDetails通知您的工作类,并且您需要修改调度程序以使用您的工厂 .