您的位置:首页 > 其它

使用Quartz实现比Timer更强大的任务定时

2010-01-06 15:31 921 查看
提起定时,可能很多人会第一时间反应是Timer,今天我向大家介绍一下Quartz,Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。虽然可以通过属性文件(在属性文件中可以指定 JDBC 事务的数据源、全局作业和/或触发器侦听器、插件、线程池,以及更多)配置 Quartz,但它根本没有与应用程序服务器的上下文或引用集成在一起。结果就是作业不能访问 Web 服务器的内部函数;触发器有两种simpleTrigger和CronTrigger,对于更具体得调度采用后者。下面我对这两个分别做了个例子,如果有什么不对的,欢迎大家指出!
在做准备工作的时候,你需要下载一个jar包:quartz-1.6.6.jar.
package p1;

import java.util.Date;

import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.StatefulJob;
import org.quartz.impl.StdSchedulerFactory;

public class Test implements StatefulJob{

public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("我是定时调用的");
}
public void task()
{
/*-------------------SimpleTrigger调度----------------*/
//通过SchedulerFactory来获取一个调度器
/* SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler =null;
//引进作业程序
JobDetail jobDetail =
new JobDetail("jobDetail-s1","jobDetailGroup-s1", Test.class);
//new一个触发器
SimpleTrigger simpleTrigger =
new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
//设置作业启动时间
long ctime = System.currentTimeMillis();
simpleTrigger.setStartTime(new Date(ctime));
//设置作业执行间隔,以毫秒为单位
simpleTrigger.setRepeatInterval(10000);
//设置作业执行次数
simpleTrigger.setRepeatCount(10);
//设置作业执行优先级默认为5
//simpleTrigger.setPriority(10);
//作业和触发器设置到调度器中
try {
scheduler=schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail, simpleTrigger);
//启动调度器
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}*/

/*-------------------CronTrigger调度----------------*/
//CronTrigger 支持比 SimpleTrigger 更具体的调度,而且也不是很复杂。
//基于 cron 表达式,CronTrigger 支持类似日历的重复间隔,而不是单一的时间间隔
//—— 这相对 SimpleTrigger 而言是一大改进。
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler =null;
JobDetail jobDetail =
new JobDetail("jobDetail2", "jobDetailGroup2", Test.class);
CronTrigger cronTrigger = new CronTrigger("cronTrigger", "triggerGroup2");
try {
CronExpression cexp = new CronExpression("0 54 15 ? * * ");
//ps:关于CronExpression表达式所表达的具体含义,请参阅下一篇文章
cronTrigger.setCronExpression(cexp);
} catch (Exception e) {
e.printStackTrace();
}
try {
scheduler=schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Test t=new Test();
t.task();
}
}

如果大家还有什么问题,欢迎留言!
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息