首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Quartz-scheduler在作业中自定义对象参数

使用Quartz-scheduler在作业中自定义对象参数
EN

Stack Overflow用户
提问于 2012-07-16 23:49:31
回答 1查看 5.3K关注 0票数 1

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

我在下面创建了一个示例应用程序,说明我是如何实现该功能的。有人知道如何使用Quartz将自定义对象用作参数吗?

下面是触发器,它安排了工作,我已经评论了领域,这是给我的问题。

代码语言:javascript
复制
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();
}

}

这是我想安排的工作。

代码语言:javascript
复制
public class SimpleJob implements Job {

public static final TestObject test = null;

public SimpleJob() {

}

public void execute(JobExecutionContext context) throws JobExecutionException {

    test.saySomething();
}

}

最后是TestObject类。

代码语言:javascript
复制
public class TestObject {

public TestObject() {

}

public void saySomething() {

    System.out.println("Test Object initialized");
}

}

请注意,我只是在寻找一种方法来让Quartz允许将不可序列化的对象用作参数(请不要评论上面正在执行的实际任务或作业)

我也尝试过为TestObject实现Serializable接口,但没有成功。

任何帮助都将不胜感激。谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2014-02-08 01:56:15

实现您自己的JobFactory。它将定制底层的Job,注入您需要的任何属性。

代码语言:javascript
复制
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来通知类您的作业,并且需要修改调度程序以使用您的工厂。

代码语言:javascript
复制
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.setJobFactory(new MyJobFactory());
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11507850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档