Quartz ,企业调度程序作业框架,用于帮助Java应用程序调度作业/任务以在指定的日期和时间运行。
本教程向您展示如何使用最新的Quartz库2.1.5开发调度程序作业。
注意
Quartz 2涉及重大的API更改,请阅读较早的Quartz 1.6.3示例中的内容 。
1.下载石英
您可以从官方网站或Maven中央存储库获取Quartz库
档案:pom.xml
<dependencies>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.1.5</version>
</dependency>
</dependencies>
注意
要在诸如JBoss,oracle或weblogic之类的Application服务器上部署Quartz,您可能需要附加的Quartz依赖关系,请阅读本指南 。
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一样,Quartz 2中仍然有两种类型的触发器,但是更改了API:
- SimpleTrigger –允许设置开始时间,结束时间,重复间隔。
- CronTrigger –允许Unix cron表达式指定运行作业的日期和时间。
SimpleTrigger –每5秒钟运行一次。
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5).repeatForever())
.build();
CronTrigger –每5秒钟运行一次。
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();
注意
阅读此官方文档以获取更多Quartz 2触发器示例。
4.调度程序
Scheduler类将“ Job ”和“ Trigger ”链接在一起并执行它。
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
5.完整的例子
使用SimpleTrigger和CronTrigger的Quartz 2完整示例。
SimpleTrigger示例 –运行5秒。
package com.mkyong.quartz;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class SimpleTriggerExample {
public static void main(String[] args) throws Exception {
// Quartz 1.6.3
// JobDetail job = new JobDetail();
// job.setName("dummyJobName");
// job.setJobClass(HelloJob.class);
JobDetail job = JobBuilder.newJob(HelloJob.class)
.withIdentity("dummyJobName", "group1").build();
//Quartz 1.6.3
// SimpleTrigger trigger = new SimpleTrigger();
// trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
// trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
// trigger.setRepeatInterval(30000);
// Trigger the job to run on the next round minute
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5).repeatForever())
.build();
// schedule it
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
CronTrigger示例 –同样,每5秒运行一次作业。
package com.mkyong.quartz;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class CronTriggerExample
{
public static void main( String[] args ) throws Exception
{
//Quartz 1.6.3
//JobDetail job = new JobDetail();
//job.setName("dummyJobName");
//job.setJobClass(HelloJob.class);
JobDetail job = JobBuilder.newJob(HelloJob.class)
.withIdentity("dummyJobName", "group1").build();
//Quartz 1.6.3
//CronTrigger trigger = new CronTrigger();
//trigger.setName("dummyTriggerName");
//trigger.setCronExpression("0/5 * * * * ?");
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();
//schedule it
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
下载源代码
下载它– Quartz2Example.zip (10kb)