博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz_1_简单编程式任务调度使用(SimpleTrigger)
阅读量:6078 次
发布时间:2019-06-20

本文共 3821 字,大约阅读时间需要 12 分钟。

  最近在工作中,要做定时任务的更能,最开始的时候,想到的是 JavaSE 中,自带 Timer 及 TimerTask 联合使用,完成定时任务。最后发现,随着业务的复杂,JDK 中的 Timer 和 TimerTask 并不能简单、灵活的完成定时任务的操作。于是,便学习了任务调度框架-- Quartz。在最初的学习中,网上的例子大多数是基于 quartz-2.0.0 之前的版本,但是发现,2.0.0之前的版本和 2.0.0之后的变化还是比较大的,网上给出的例子及方法,都不适用了。最后,在学习了 quartz-2.1.7 之后,大致了解了下相关的方法。现分享出来,以供学习。

  这次大概会写到的东西,如下图:

  第一个简单的任务调度实例如下:

首先是自定义自己的作业类,然后是开始任务调度操作。具体的使用方法,如下代码:

(1)自定义的作业类

/** 0.0.0.1 */ package com.gaoqing.common.quartz;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;/** * 自定义作业类 * @author 高青 * 2014-3-23 */public class MyJob implements Job{    /**     * 2014-3-23     */    public MyJob() {            }        @Override    public void execute(JobExecutionContext context) throws JobExecutionException {                //得到当前作业的名称        String jobName = context.getJobDetail().getJobDataMap().getString("name");                System.out.println(                "当前作业开始执行了,作业的名称为:" + jobName +                 ",作业的时间是:" + new SimpleDateFormat("yyyy-MM-dd").format(new Date())        );    }}

作业类中的逻辑就是,取出任务调度器中注册的 JobDetail 的名称。

(2)具体的任务调度操作如下:

/** 0.0.0.1 */ package com.gaoqing.common.quartz;import java.util.Date;import org.apache.log4j.Logger;import org.quartz.JobBuilder;import org.quartz.JobDataMap;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SimpleScheduleBuilder;import org.quartz.SimpleTrigger;import org.quartz.TriggerBuilder;import org.quartz.TriggerKey;import org.quartz.impl.StdSchedulerFactory;/** * 简单任务调度测试类 * @author 高青 * 2014-3-20 */public class SimpleQuartzTest{        /** 日志对象 */    private static Logger log = Logger.getLogger(SimpleQuartzTest.class);    /**     * 2014-3-20     */    public SimpleQuartzTest() {            }    /**     * 主线程方法     * author 高青     * 2014-3-20     * @param args 参数字符串集     * @return void 空     * @throws SchedulerException 调度器异常     */    public static void main(String[] args) throws SchedulerException {                //得到一个默认的调度器        Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();                //得到具体的和指定作业相关的 JobDetail 对象        JobDetail jobDetail = JobBuilder.              //2.0.0之后,JobDetail 变成了接口,不能用之前的 new JobDetail()来实例了,现在要通过相应的作业建造器来管理生成                                newJob(MyJob.class).                                withIdentity("myFirstJob", "firstJob").                                build();              //要调用建造器的 build()方法,才能实例当前作业的具体作业对象                //得到作业的参数对象        JobDataMap jobDataMap = jobDetail.getJobDataMap();   //可以向作业数据对象中,存放自己需要的数据,在自己实现的 Job 类中,可以通过 context 得到相应的参数,以便做业务处理        jobDataMap.put("myFirstJob", "first");             jobDataMap.put("name", "myFirstJob");                     //实例化触发器对象(定义执行的时间和执行的周期)        SimpleTrigger simpleTrigger = TriggerBuilder.newTrigger(). //同上,触发器的也需要相应的建造器来实例化触发器,现在的 Trigger 也是接口,不能通过 new Trigger() 来实例化了                withIdentity(TriggerKey.triggerKey("myFirstTigger", "myFirstGroup")).                withSchedule(                       //在得到对应的 SimpleTrigger 时,需要通过触发器建造器的 widthSchedule()方法,建造对应的触发器                        SimpleScheduleBuilder.                        simpleSchedule().                        repeatForever().                        withIntervalInSeconds(5)                        ).                        startAt(new Date()).                        build();                //添加调度作业(将具体的作业和触发器添加到作业中)        defaultScheduler.scheduleJob(jobDetail, simpleTrigger);        //执行调度任务        defaultScheduler.start();    }}

  上面就是一个简单的任务调度的实现,和之前的版本相比,变化还是挺大了,个人感觉后面的版本更强调了性能和多任务处理。本文主要旨在实用,并不讲解大量的理论,理论在网上都是可以搜到的。希望自己的一点点分享,能对他人有一点点的帮助。下一篇,将写一个简单的任务调度实例,使用更能强大的 CronTrigger 触发器来实现任务调度功能。

  

转载于:https://www.cnblogs.com/gaoqing/p/3641988.html

你可能感兴趣的文章
### 继承 ###
查看>>
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>
Struts2与Struts1区别
查看>>
网站内容禁止复制解决办法
查看>>
Qt多线程
查看>>
我的友情链接
查看>>
想说一点东西。。。。
查看>>