首页 文章

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

提问于
浏览
1

我正在测试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 回答

  • 5

    实现自己的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();
    

相关问题