定时任务框架Quartz详解-基础篇

2018/5/31 posted in  Java

原创: 蜗牛 Java架构师之路 前天
原文地址

概述

Quartz 是 OpenSymphony 开源组织的一个开源项目,定时任务框架,纯 Java 语言实现,最新版本为 2.3.0。
Quartz 中用到的设计模式:

  • Builder 模式
  • Factory 模式
  • 组件模式
  • 链式模式

Quartz 组成部分

  • 调度器:scheduler
  • 任务:JobDetail
  • 触发器:Trigger, 包括 SimpleTrigger 和 CronTrigger

第一个 Quartz 程序

实现每隔 1 秒打印一个 Hello World

1. 创建 Maven 项目,添加依赖:

<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
  <groupId>org.quartz-scheduler</groupId>
  <artifactId>quartz</artifactId>
  <version>2.3.0</version>
</dependency>  

2. 创建 HelloWorldJob 类

package quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * created by Java-Road
 * created in 2018/5/26
 */
public class HelloWorldJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String strTime = new SimpleDateFormat("HH-mm-ss").format(new Date());
        System.out.println( strTime + ":Hello World!");
    }
}

3. 创建 MyScheduler 类

package quartz;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
/**
 * created by Java-Road
 * created in 2018/5/26
 */
public class MyScheduler {
    public static void main(String[] args) throws SchedulerException {
        //创建调度器Schedule
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        //创建JobDetail实例,并与HelloWordlJob类绑定
        JobDetail jobDetail = JobBuilder.newJob(HelloWorldJob.class).withIdentity("job1", "jobGroup1")
                .build();
        //创建触发器Trigger实例(立即执行,每隔1S执行一次)
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "triggerGroup1")
                .startNow()
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever())
                .build();
        //开始执行
        scheduler.scheduleJob(jobDetail, trigger);
        scheduler.start();
    }
}