Quartz,企业调度作业框架,帮助 Java 应用程序调度作业/任务在指定的日期和时间运行。
本教程向您展示如何使用最新的 Quartz 库 2.1.5 开发调度程序作业。
注意
Quartz 2 涉及重大的 API 更改,请阅读旧版 Quartz 1.6.3 示例。
Quartz 2 涉及重大的 API 更改,请阅读旧版 Quartz 1.6.3 示例。
1.下载Quartz
您可以从官方网站或 Maven 中央存储库获取 Quartz 库
文件:pom.xml
<dependencies>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.1.5</version>
</dependency>
</dependencies>
注意
要在 JBoss、oracle 或 weblogic 等应用服务器上部署 Quartz,您可能需要添加 Quartz 依赖项,请阅读本指南。
要在 JBoss、oracle 或 weblogic 等应用服务器上部署 Quartz,您可能需要添加 Quartz 依赖项,请阅读本指南。
2.Quartz作业
Quartz job 定义了你要运行什么?
文件: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 触发器示例。
阅读此官方文档以获取更多 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);
}
}