Spring Quartz 集群动态创建任务

 

Quartz 使用时需要注意,它是将 对象序列化 掉,保存起来,符合时间条间时再取出来反序列化执行.那么,它就要求所有的操作对象是可序列化的.通常我们操作是通过 service 层来执行的,但是service显然是不可以序列化的,因此有两种思路 1 设置上下文对象,然后调用时取出 2 设置对象名称从Spring 中获取. 参考的例子中 2,3 分别用了这两个思路.

具体任务生成参考官方示例

 quartz-2.2.3\examples\src\org\quartz\examples\example3\CronTriggerExample.java

自己实现的部分代码:

Job定义部分:

/**
 * 用于定时任务(注意这里所有属性必需支持Serializable,否则会报错)
 *
 * @author zhouxianglh@gmail.com
 *
 *         2017年4月7日
 */
public abstract class YmtJob implements Job, Serializable {
    /**
     *
     */
    private static final long serialVersionUID = -4226096330498705509L;

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();
        run(dataMap);
    }

任务生成部分: 

        JobDataMap jobData = new JobDataMap();
        if (null != job.getMap()) {
            jobData.putAll(job.getMap());
        }
        JobDetail jobDetail = JobBuilder.newJob(job.getClass()).setJobData(jobData)
                .withIdentity(JobKey.jobKey(job.getKey())).build();
        //
        CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(TriggerKey.triggerKey(job.getKey()))
                .withSchedule(CronScheduleBuilder.cronSchedule(job.getCronExpression())).build();
        //
        Scheduler scheduler = schedulerFactoryBean.getScheduler();
        scheduler.scheduleJob(jobDetail, trigger);

任务执行

    @Override
    public void run(JobDataMap dataMap) {
        TaskBiz taskBiz = SpringContex.getBean("taskBiz");
        BillUnit billUnit = SpringContex.getBean("billUnit");
        TaskPrePick prePick = billUnit.getPrePickById(id);
        WmsTask task = new WmsTask();
        task.setBillid(id);
        task.setTaskdesc("根据收货单生成收货任务");
        task.setLevel(0);
        task.setType(7);
        task.setWhCode(prePick.getWhCode());
        taskBiz.addTask(task);
    }

参考:
http://www.quartz-scheduler.org/documentation/quartz-2.1.x/quick-start.html
http://blog.csdn.net/zjx86320/article/details/52346187
http://fanshuyao.iteye.com/blog/2309702

转载于:https://my.oschina.net/zhouxiang/blog/888455

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值