调度框架Quartz快速入门
来源:互联网 发布:笔记本散热器推荐 知乎 编辑:程序博客网 时间:2024/05/22 05:16
Quartz是功能非常强大的任务调度框架,下面用一个小例子说明如何使用。
首先去Quartz官网下载http://www.opensymphony.com/quartz/ ,目前最新的版本式1.6.2,本文中使用的是1.6.1。把压缩包解压到本地,里面包含了quartz本身,文档,源代码和依赖的类包等。
在eclipse中新建一个java工程,把quartz的jar文件quartz-1.6.1.jar加入构建路径,同时quartz运行至少还需要另外两个类包:commons-collections-3.2.jar 和 commons-logging-1.1.jar,这两个文件可以在lib/core目录下找到。
下面我们就可以开始编写类体验quartz的强大功能了。下面以一个简单的定时输出小任务为例,这个任务很简单,就是每隔一段时间输出一句话。
首先编写类PrintoutJob实现一个简单的输出任务。在Quartz框架里运行的任务叫做job,这个类需要实现Job接口,
public class PrintoutJob implements Job {
@Override
public void execute(JobExecutionContext ctx) throws JobExecutionException{
System.out.println("do task...");
}
}
任务现在已经有了,还需要一个让它运行起来的调度器—Scheduler。再新建一个类JobRunner:
public class JobRunner {
public static void main(String[] args) {
Scheduler scheduler = null;
SchedulerFactory schFactory = new StdSchedulerFactory();
try {
scheduler = schFactory.getScheduler();
JobDetail initjob = new JobDetail("printjob", "jobGroup", PrintoutJob.class);
SimpleTrigger trig = new SimpleTrigger("trigger1", "jobGroup");
Date runTime = TriggerUtils.getEvenSecondDate(new Date());
trig.setStartTime(runTime);
trig.setRepeatInterval(3000);
trig.setRepeatCount(10);
scheduler.scheduleJob(initjob, trig);
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
要让Scheduler按照你的意图去调度自己的job,还需要告诉Schduler关于这个job的一些详细信息,job的详细信息保存在一个JobDetail的实例中,
new JobDetail("printjob", "jobGroup", PrintoutJob.class);
表示这个job的名字叫“printjob”,属于“jobGroup”线程组,job的实现类是PrintoutJob。有了job的详细信息,还要告诉调度器scheduler如何去做调度,即在什么时间,按照什么频率去执行job,提供这个信息的是一个trigger,我们先创建一个简单类型的trigger—SimpleTrigger,下面给trigger设置属性:
trig.setStartTime(runTime)——设置job开始运行的时间,这里是立刻开始,
trig.setRepeatInterval(3000)——设置运行间隔时间是3000毫秒即3秒,
trig.setRepeatCount(10)——设置job一共执行10次,
再把我们创建的JobDetail和SimpleTrigger注册到shcduler:
scheduler.scheduleJob(initjob, trig)
调用start()方法启动schduler,前面写好的任务就按照我们的设定开始执行了。
SimpleTrigger可以为我们完成一些简单的调度功能,可是我们有时需要一些更复杂的调度,比如每月的某天允许,或每周几运行等等。Quartz也提供了一个完成这样复杂调度的trigger-CronTrigger,CronTrigger的功能非常强大,通过时间表达式可以完成很多复杂的调度,它的表达式和Linux下的cron一样。使用CronTrigger:
CronTrigger jobTrigger = new CronTrigger("onlineTrigger", "triggerGroup");
CronExpression cexp = new CronExpression(“0/5 * * * * ?”);
jobTrigger.setCronExpression(cexp);
需要注意的一点是,与使用Thread来实现定时调度不同的是,quartz的job既不需要继承Thread,也不需要实现Runnable接口,Job每次执行都是一个新的实例。
上面的例子代码显示,Job是被Scheduler调度运行的,那如果需要传递参数给Job,好像就没办法实现了,其实quartz给我们提供了一种给Job传递参数的办法,通过JobDetail的DataMap,在主类中把要传递的数据放入DataMap中,比如我们要把一个参数类Config传递给Job:
initjob.getJobDataMap().put("CONFIG", config);
Job获取传递的数据:
Config cfg = (Config)ctx.getJobDetail().getJobDataMap().get("CONFIG");
- 调度框架Quartz快速入门
- Quartz调度框架快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- Quartz任务调度快速入门
- structs通过filter来转义html标签
- 解决JSP网站基于数据库的用户权限分配
- FckEditor中文配置手册详细说明
- MyEclipse生成的Spring+Hibernate无法保存数据问题的解决方法
- 【转帖】 扩展PassThru驱动:两个实现IP过滤的NDIS IM驱动
- 调度框架Quartz快速入门
- Pass Arrays Between vc++ and vb
- 一站集成叫板平台交易:朗格里拉偷袭阿里巴巴
- UDP穿透NAT的原理与实现(UDP“打洞”原理)
- ARe学习进展
- FCKEditor的精简与使用
- SQL如何删除重复行
- OA源码转让
- linux下源码安装mysql+apache+php+phpMyAdmin小记