Fork me on GitHub

Quartz入门教程

Quartz是开源的作业调度框架,使你能在预定义的日期和时间运行任务。

Quartz 1.6

Quartz是强大和先进的调度框架,帮助Java开发者在指定的日期和时间运行调度作业。
本教程教你使用Quartz 1.6.3开发调度作业。

本示例有点过时,新版Quartz版本为 2.2.3。

  1. 下载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>
  1. Quartz作业
    Quartz作业定义了你要运行什么任务。
    HelloJob.java文件
public class HelloJob implements Job {
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("Hello Quartz!");
    }
}
  1. 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 * * * * ?");
  1. 调度器
    调度器类把Job(作业)和Trigger(触发器)连接在一起并执行。
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
  1. 完整代码
    这里有两个使用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);
    }
}

Quartz 2

JobListener -- 创建监听类以跟踪正在运行的工作状态

Multiple Jobs -- 声明和运行多个工作

List All Jobs -- 列举所有存在的工作

Trigger A Quartz Job Manually -- JSF2示例,显示所有工作并手动触发特定的工作

posted @ 2016-09-24 17:16  Zong_在路上  阅读(3221)  评论(0编辑  收藏  举报