JAVA第三方开源库之Quartz

[b]简介:
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。
Quartz 的两个基本单元是作业(job)和触发器(trigger)。
作业 是能够调度的可执行任务
触发器 提供了对作业的调度,主要分为SimpleTrigger和Cron Trigger[/b]
[b]示例 1:作业[/b]
通过实现 org.quartz.job 接口,可以使 Java 类变成可执行的。清单 1 提供了 Quartz 作业的一个示例。这个类用一条非常简单的输出语句覆盖了 execute(JobExecutionContext context) 方法。这个方法可以包含我们想要执行的任何代码
[b]清单1 QuartzJob[/b]
package com.dheaven.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class QuartzJob implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(df.format(new Date())+" hi,我是一个job,我要开始执行了。");
}
}

[b]示例 2:简单触发器[/b]

触发器可以实现对任务执行的调度。Quartz 提供了几种不同的触发器,复杂程度各不相同。清单 2 中的 SimpleTrigger 展示了触发器的基础:
[b]清单2 TestClass[/b]
package com.dheaven.demo.quartz;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.junit.Test;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerUtils;


import com.dheaven.demo.pojo.Student;
import com.dheaven.framework.util.FileUtils;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class TestClass {

@Test
public void testSimpleJob() {
SchedulerFactory schedFact =
new org.quartz.impl.StdSchedulerFactory();

try {
Scheduler sched = schedFact.getScheduler();
sched.start();

JobDetail deviceJobDetail =
new JobDetail("deviceJob", "massnmp",QuartzJob.class);
Trigger deviceTrigger = TriggerUtils.makeSecondlyTrigger(5);
deviceTrigger.setStartTime(new Date());
deviceTrigger.setName("deviceTrigger");
sched.scheduleJob(deviceJobDetail, deviceTrigger);

deviceJobDetail =
new JobDetail("deviceJob2", "massnmp", Job2.class);
deviceTrigger = TriggerUtils.makeSecondlyTrigger(9);
deviceTrigger.setStartTime(new Date());
deviceTrigger.setName("deviceTrigger2");
sched.scheduleJob(deviceJobDetail, deviceTrigger);

} catch (SchedulerException e) {
e.printStackTrace();
}

while (true) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}


[b]示例 2:复杂触发器[/b]

CronTrigger 支持比 SimpleTrigger 更具体的调度,而且也不是很复杂。基于 cron 表达式,CronTrigger 支持类似日历的重复间隔,而不是单一的时间间隔 —— 这相对 SimpleTrigger 而言是一大改进。
Cron 表达式包括以下 7 个字段:



小时
月内日期

周内日期
年(可选字段)
特殊字符

Cron 触发器利用一系列特殊字符,如下所示:

反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。


问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。


在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。


井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。


星号(*)字符是通配字符,表示该字段可以接受任何可能的值。


[b]清单2 TestClass[/b]
package com.dheaven.demo.quartz;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.junit.Test;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerUtils;


import com.dheaven.demo.pojo.Student;
import com.dheaven.framework.util.FileUtils;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class TestClass {

@Test
public void testCronJob() {
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();

try {
Scheduler sched = schedFact.getScheduler();
sched.start();

JobDetail deviceJobDetail =
new JobDetail("deviceJob", "massnmp",QuartzJob.class);
CronTrigger deviceTrigger = new CronTrigger();
deviceTrigger.setCronExpression("30 38 11 * * ?");

deviceTrigger.setStartTime(new Date());
deviceTrigger.setName("deviceTrigger");
sched.scheduleJob(deviceJobDetail, deviceTrigger);
} catch (SchedulerException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}

while (true) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值