Quartz是功能强大且先进的调度程序框架,可帮助Java开发人员调度作业以在指定的日期和时间运行。
本教程向您展示如何使用Quartz 1.6.3开发调度程序作业。
注意
除非您仍在使用旧的Quartz 1.6.3库,否则该示例已经过时,否则,您可能会对这个最新的Quartz 2.1.5示例感兴趣。
1.下载石英
您可以从官方网站或Maven中央存储库获取Quartz库
档案:pom.xml
<dependencies>
<!-- Quartz API -->
<dependency>
<groupId>opensymphony</groupId>
<artifactId>quartz</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.directory.studio</groupId>
<artifactId>org.apache.commons.logging</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
2.石英作业
定义石英作业要运行什么?
文件:HelloJob
package com.mkyong.common;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job
{
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("Hello Quartz!");
}
}
3.石英触发
Quartz触发器定义了何时Quartz将运行您上面的Quartz的工作?
Quartz触发器有两种类型:
- SimpleTrigger –允许设置开始时间,结束时间,重复间隔。
- CronTrigger –允许Unix cron表达式指定运行作业的日期和时间。
Unix cron表达式
Unix cron表达式具有高度的灵活性和强大的功能,您可以在以下网站上学习并看到许多cron表达式示例。
SimpleTrigger –每30秒运行一次。
SimpleTrigger trigger = new SimpleTrigger();
trigger.setName("dummyTriggerName");
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
trigger.setRepeatInterval(30000);
CronTrigger –每30秒运行一次。
CronTrigger trigger = new CronTrigger();
trigger.setName("dummyTriggerName");
trigger.setCronExpression("0/30 * * * * ?");
4.调度程序
Scheduler类将“ Job ”和“ Trigger ”链接在一起并执行它。
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
5.完整的例子
这是两个通过SimpleTrigger和CronTrigger使用Quartz的完整示例。
SimpleTrigger示例
第一次执行需要30秒,延迟1秒。
package com.mkyong.common;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
public class SimpleTriggerExample
{
public static void main( String[] args ) throws Exception
{
JobDetail job = new JobDetail();
job.setName("dummyJobName");
job.setJobClass(HelloJob.class);
//configure the scheduler time
SimpleTrigger trigger = new SimpleTrigger();
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
trigger.setRepeatInterval(30000);
//schedule it
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
CronTrigger示例
同样,每30秒运行一次作业。
package com.mkyong.common;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.impl.StdSchedulerFactory;
public class CronTriggerExample
{
public static void main( String[] args ) throws Exception
{
JobDetail job = new JobDetail();
job.setName("dummyJobName");
job.setJobClass(HelloJob.class);
CronTrigger trigger = new CronTrigger();
trigger.setName("dummyTriggerName");
trigger.setCronExpression("0/30 * * * * ?");
//schedule it
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
下载源代码
下载它– QuartzExample.zip (14kb)