Quartz是开源的作业调度框架,使你能在预定义的日期和时间运行任务。
Quartz 1.6
Quartz是强大和先进的调度框架,帮助Java开发者在指定的日期和时间运行调度作业。
本教程教你使用Quartz 1.6.3开发调度作业。
本示例有点过时,新版Quartz版本为 2.2.3。
- 下载Quartz
可以从官网上下载Quartz,或者从Maven中央仓库。
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>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
- Quartz作业
Quartz作业定义了你要运行什么任务。
HelloJob.java文件
public class HelloJob implements Job {
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("Hello Quartz!");
}
}
- Quartz触发器
Quartz触发器定义了Quartz何时执行你上面定义的的Quartz作业。
有两种类型的Quartz触发器:
SimpleTrigger
- 可以设置开始时间、结束时间和重复间隔。
CronTrigger
- 可以使用Unix cron表达式指定日期和时间执行定义的工作。
Unix cron表达式:
Unix cron表达式具有高灵活性且功能强大,可以通过以下网址学习cron表达式。
http://en.wikipedia.org/wiki/CRON_expression
http://www.quartz-scheduler.org/docs/examples/Example3.html
SimpleTrigger - 每3秒执行一次
SimpleTrigger trigger = new SimpleTrigger();
trigger.setName("dummyTriggerName");
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
trigger.setRepeatInterval(3000);
CronTrigger - 每3秒执行一次
CronTrigger trigger = new CronTrigger();
trigger.setName("dummyTriggerName");
trigger.setCronExpression("0/3 * * * * ?");
- 调度器
调度器类把Job(作业)和Trigger(触发器)连接在一起并执行。
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
- 完整代码
这里有两个使用Quartz完整例子,分别使用了SimpleTrigger和CronTrigger。
SimpleTrigger实例
每3秒执行一次,延时1秒
public class SimpleTriggerExample {
public static void main(String[] args) throws SchedulerException {
JobDetail job = new JobDetail();
job.setName("dummyJobName");
job.setJobClass(HelloJob.class);
// configure the scheduler time
SimpleTrigger trigger = new SimpleTrigger();
trigger.setName("dummyTriggerName");
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
trigger.setRepeatInterval(3000);
// schedule it
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
CronTrigger实例
public class CronTriggerExample {
public static void main(String[] args) throws SchedulerException, ParseException {
JobDetail job = new JobDetail();
job.setName("dummyJobName");
job.setJobClass(HelloJob.class);
// configure the scheduler time
CronTrigger trigger = new CronTrigger();
trigger.setName("dummyTriggerName");
trigger.setCronExpression("0/3 * * * * ?");
// schedule it
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}