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);
}
}