我正在测试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接口,但没有成功。
任何帮助都将不胜感激。谢谢你。
发布于 2014-02-08 01:56:15
实现您自己的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();https://stackoverflow.com/questions/11507850
复制相似问题