博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz 任务调度(二)
阅读量:7107 次
发布时间:2019-06-28

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

hot3.png

本文上传一个小Quartz 的小Demo;

项目目录如下:

任务类 WorkJob.java :

/** * @package :com.andy.demo.quartz.job
* @author :wanglongjie
* @createDate :2015年11月2日下午2:19:22
*/package com.andy.demo.quartz.job;import java.util.Date;import org.quartz.Job;import org.quartz.JobDataMap;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;/** * @package :com.andy.demo.quartz.job
* @file :WorkJob.java
* @describe :
* @author :wanglongjie
* @createDate :2015年11月2日下午2:19:22
* @updater :
* @updateDate :
* @updateContent :
*/public class WorkJob implements Job { public static int times = 1; /* * (non-Javadoc) * * @see org.quartz.Job#execute(org.quartz.JobExecutionContext) */ @Override public void execute(JobExecutionContext context) throws JobExecutionException { // TODO Auto-generated method stub String jobName = context.getJobDetail().getName(); String triggerName = context.getTrigger().getName(); JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); String personName = jobDataMap.getString("personName"); Integer personAge = jobDataMap.getIntegerFromString("personAge"); System.out.println("[" + times + "]: Date[" + new Date() + "]"); System.out.println("JOB[jobName[" + jobName + "],triggerName[" + triggerName + "],jobDateMap[" + personName + "," + personAge + "]]"); System.out.println("................................."); times++; }}

调度的抽象类 TriggerRunner.java :

/** * @package :com.andy.demo.quartz.trigger.dao
* @author :wanglongjie
* @createDate :2015年11月2日下午4:03:19
*/package com.andy.demo.quartz.trigger.dao;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.impl.StdSchedulerFactory;/** * @package :com.andy.demo.quartz.trigger.dao
* @file :TriggerRunner.java
* @describe :
* @author :wanglongjie
* @createDate :2015年11月2日下午4:03:19
* @updater :
* @updateDate :
* @updateContent :
*/public abstract class TriggerRunner { protected static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory(); /** * * @method :loadJob
* @describe :加载 调度,默认JOB 名称、JOB 组名、Trigger 名称、Tirgger 组名
* @author :wanglongjie
* @createDate :2015年11月2日下午5:05:31
* @param data * @throws Exception * void */ public abstract void loadJob(Object... data) throws Exception; /** * * @method :loadJob
* @describe :加载 调度,有参数
* @author :wanglongjie
* @createDate :2015年11月2日下午4:11:23
* @param jobName * :JOB 名称 * @param jobGroup * :JOB 组名 * @param triggerName * :Trigger 名称 * @param triggerGroup * :Tirgger 组名 * @param data * :可变实参 * @throws Exception * void */ public abstract void loadJob(String jobName, String jobGroup, String triggerName, String triggerGroup, Object... data) throws Exception; /** * * @method :startJobs
* @describe :启动 调度
* @author :wanglongjie
* @createDate :2015年11月2日下午4:04:24
* @throws SchedulerException * void */ public void startJobs() throws SchedulerException { Scheduler sched = gSchedulerFactory.getScheduler(); System.out.println("startJobs..." + gSchedulerFactory.toString() + ", " + sched.toString()); sched.start(); } /** * * @method :shutdownJobs
* @describe :关闭调度
* @author :wanglongjie
* @createDate :2015年11月2日下午4:04:49
* @throws SchedulerException * void */ public void shutdownJobs() throws SchedulerException { Scheduler sched = gSchedulerFactory.getScheduler(); System.out.println("shutdownJobs..." + gSchedulerFactory.toString() + ", " + sched.toString()); if (!sched.isShutdown()) { sched.shutdown(); } }}
调度子类一  SimpleTriggerRunner.java :
/** * @package :com.andy.demo.quartz.trigger
* @author :wanglongjie
* @createDate :2015年11月2日下午4:15:21
*/package com.andy.demo.quartz.trigger;import java.util.Date;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SimpleTrigger;import com.andy.demo.quartz.job.WorkJob;import com.andy.demo.quartz.trigger.dao.TriggerRunner;/** * @package :com.andy.demo.quartz.trigger
* @file :SimpleTriggerRunner.java
* @describe :
* @author :wanglongjie
* @createDate :2015年11月2日下午4:15:21
* @updater :
* @updateDate :
* @updateContent :
*/public class SimpleTriggerRunner extends TriggerRunner { private static String jobName = "simple_printPerson"; private static String jobGroup = "simple_person"; private static String triggerName = "simple_tri_printPerson"; private static String triggerGroup = "simple_tri_group_person"; /* * (non-Javadoc) * * @see * com.andy.demo.quartz.trigger.dao.TriggerRunner#loadJob(java.lang.Object * []) */ @Override public void loadJob(Object... data) throws Exception { // TODO Auto-generated method stub this.loadJob(jobName, jobGroup, triggerName, triggerGroup, data); } /* * (non-Javadoc) * * @see * com.andy.demo.quartz.trigger.dao.TriggerRunner#loadJob(java.lang.String, * java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]) */ @Override public void loadJob(String jobName, String jobGroup, String triggerName, String triggerGroup, Object... data) throws Exception { // TODO Auto-generated method stub // 1、创建 Scheduler 对象 Scheduler scheduler = gSchedulerFactory.getScheduler(); System.out.println("loadJob..." + gSchedulerFactory.toString() + ", " + scheduler.toString()); // 2、创建 一个 JobDetail 实例, 指定 SimpleJob JobDetail jobDetail = new JobDetail(jobName, jobGroup, WorkJob.class); // 给 JobDetail 添加一些参数 if (data != null && data.length >= 2 && data.length % 2 == 0) { for (int i = 0; i < data.length - 1; i = i + 2) { jobDetail.getJobDataMap().put(data[i], data[i + 1]); } } // 3、创建 一个 SimpleTrigger 实例 SimpleTrigger simpleTrigger = new SimpleTrigger(triggerName, triggerGroup); System.out.println(new Date()); // 定义调度规则 // ①马上启动 // simpleTrigger.setStartTime(new Date()); // 5秒后启动 simpleTrigger .setStartTime(new Date(System.currentTimeMillis() + 5000L)); // ①两分钟后停止(当运行次数和时间范围冲突时,超过时间范围的任务运行不被执行) simpleTrigger.setEndTime(new Date( System.currentTimeMillis() + 2 * 60 * 1000L)); // ②每5秒运行一次 simpleTrigger.setRepeatInterval(3000); // ③共运行50次 simpleTrigger.setRepeatCount(50); // 4、注册并进行调度 scheduler.removeJobListener(jobName); scheduler.removeTriggerListener(jobName); scheduler.scheduleJob(jobDetail, simpleTrigger); }}
调度子类一  CronTriggerRunner.java :
/** * @package :com.andy.demo.quartz.trigger
* @author :wanglongjie
* @createDate :2015年11月2日下午4:15:46
*/package com.andy.demo.quartz.trigger;import java.util.Date;import org.quartz.CronExpression;import org.quartz.CronTrigger;import org.quartz.JobDetail;import org.quartz.Scheduler;import com.andy.demo.quartz.job.WorkJob;import com.andy.demo.quartz.trigger.dao.TriggerRunner;/** * @package :com.andy.demo.quartz.trigger
* @file :CronTriggerRunner.java
* @describe :
* @author :wanglongjie
* @createDate :2015年11月2日下午4:15:46
* @updater :
* @updateDate :
* @updateContent :
*/public class CronTriggerRunner extends TriggerRunner { private static String jobName = "cron_printPerson"; private static String jobGroup = "cron_person"; private static String triggerName = "cron_tri_printPerson"; private static String triggerGroup = "cron_tri_group_person"; /* * (non-Javadoc) * * @see * com.andy.demo.quartz.trigger.dao.TriggerRunner#loadJob(java.lang.Object * []) */ @Override public void loadJob(Object... data) throws Exception { // TODO Auto-generated method stub this.loadJob(jobName, jobGroup, triggerName, triggerGroup, data); } /* * (non-Javadoc) * * @see * com.andy.demo.quartz.trigger.dao.TriggerRunner#loadJob(java.lang.String, * java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]) */ @Override public void loadJob(String jobName, String jobGroup, String triggerName, String triggerGroup, Object... data) throws Exception { // TODO Auto-generated method stub // 1、创建 Scheduler 对象 Scheduler scheduler = gSchedulerFactory.getScheduler(); // 2、创建 一个 JobDetail 实例, 指定 SimpleJob JobDetail jobDetail = new JobDetail(jobName, jobGroup, WorkJob.class); // 给 JobDetail 添加一些参数 if (data != null && data.length >= 2 && data.length % 2 == 0) { for (int i = 0; i < data.length - 1; i = i + 2) { jobDetail.getJobDataMap().put(data[i], data[i + 1]); } } // 3、创建 CronTrigger 实例 CronTrigger cronTrigger = new CronTrigger(triggerName, triggerGroup); System.out.println(new Date()); // 定义调度规则 // 设置调度启动、关闭时间(立即启动,2分钟后关闭)(当运行次数和时间范围冲突时,超过时间范围的任务运行不被执行) cronTrigger.setStartTime(new Date()); cronTrigger.setEndTime(new Date( System.currentTimeMillis() + 2 * 60 * 1000L)); // 每5秒执行一次 String cronExpressionStr = "0/5 * * * * ?"; CronExpression cronExpression = new CronExpression(cronExpressionStr); cronTrigger.setCronExpression(cronExpression); // 4、注册并进行调度 scheduler.removeJobListener(jobName); scheduler.removeTriggerListener(jobName); scheduler.scheduleJob(jobDetail, cronTrigger); }}
测试类 TriggerRunnerTest.java :
/** * @package :com.andy.demo.quartz.trigger.test
* @author :wanglongjie
* @createDate :2015年11月2日下午5:14:52
*/package com.andy.demo.quartz.trigger.test;import org.junit.Test;import com.andy.demo.quartz.trigger.CronTriggerRunner;import com.andy.demo.quartz.trigger.SimpleTriggerRunner;import com.andy.demo.quartz.trigger.dao.TriggerRunner;/** * @package :com.andy.demo.quartz.trigger.test
* @file :TriggerRunnerTest.java
* @describe :
* @author :wanglongjie
* @createDate :2015年11月2日下午5:14:52
* @updater :
* @updateDate :
* @updateContent :
*/public class TriggerRunnerTest { public Object data[] = new Object[] { "personName", "Andy", "personAge", "25" }; public static void main(String[] args) { try { Object data[] = new Object[] { "personName", "Andy", "personAge", "25" }; TriggerRunner runner = new CronTriggerRunner(); // TriggerRunner runner = new SimpleTriggerRunner(); runner.loadJob(data); runner.startJobs(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } @Test public void testSimpleTirggerRunner() throws Exception { TriggerRunner runner = new SimpleTriggerRunner(); runner.loadJob(data); runner.startJobs(); } @Test public void testCronTirggerRunner() throws Exception { TriggerRunner runner = new CronTriggerRunner(); runner.loadJob(data); runner.startJobs(); }}

最后说明一点,不知道什么原因测试类中用JUnit测试不成功,用main方法是可以的,究其原因还没仔细研究,本文就这样吧!

转载于:https://my.oschina.net/andy1989/blog/524981

你可能感兴趣的文章
数据结构之堆---最大堆和最小堆
查看>>
iOS 用UISearchDisplayController实现查找功能
查看>>
poj2506 Tiling
查看>>
拦截导弹 (最长上升子序列LIS)
查看>>
已发布Acey.ExcelX3.4英文和中文版
查看>>
10.28T7 位运算+记忆化+DLZ常数剪枝
查看>>
HTML/CSS一些需要注意的基础知识
查看>>
UML类图与类的关系详解
查看>>
Http 请求处理流程
查看>>
ASP.NET MVC3细嚼慢咽---(3)Razor视图语法
查看>>
你必须知道的.NET——内存分配
查看>>
继承与接口课堂作业
查看>>
详解Java中ArrayList、Vector、LinkedList三者的异同点(转)
查看>>
Cookie基础
查看>>
禁用apache模块
查看>>
[zz]堆栈溢出的运行时探测
查看>>
java 动态代理学习(Proxy,InvocationHandler)
查看>>
MySQL——数据类型
查看>>
Python--操作excel
查看>>
认识全面的null
查看>>