quartz入门(一)(hello world!!!)

相关概念:
    Scheduler - 与调度程序交互的主要API。
    Job - 执行的任务需要实现的接口(任务模板)
    JobDetail - 用于定义任务属性(任务实例)
    Trigger - 用于触发定义任务的如何触发(触发器)
    JobBuilder - 用于构建JobDetail实例(常用静态导入)
    TriggerBuilder - 用于构建触发器实例(常用静态导入)
所需jar包获取地址

一.创建简单job类(实现org.quartz.Job接口,重写execute方法即可):
Hello.java
二.任务实例创建和调度过程:
静态导入准备

相关步骤:
     1.获取调度器
     2.定义jobDetail实例并与HelloJob关联
     3.创建trigger(定义job触发方式)
     4.告诉Quartz使用我们定义的触发器来调度job实例
     5.启动调度程序(触发器等在调度程序启动后才能真正运行)


任务调度准备过程

详细过程:


创建调度工厂并获取调度器

定义任务细节并将其关联到实际HelloJob

定义任务触发方式,与实际job关联,并trigger对象

告诉Quartz使用我们的触发器来调度job:
scheduler.scheduleJob(job,trigger);

启动调度(触发器等在调度程序启动后才能真正运行):

scheduler.start();

实际调度过程:


运行结果:



调度完整代码:

/**
 * Copyright (C), 2015-2018, Nxin
 * FileName: SimpleTest1
 * Author:   xff
 * Date:     2018/5/26 11:04
 * Description: HelloJob简单调度
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.feifei.test1;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * 使用静态导入维持代码的简洁性
 */
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import static org.quartz.DateBuilder.evenMinuteDate;
/**
 * 〈一句话功能简述〉<br> 
 * 〈HelloJob简单调度〉
 *
 * @author xff
 * @create 2018/5/26
 * @since 1.0.0
 */
public class SimpleTest1 {

    /*
    创建调度工厂,并获取调度器
     */
    public static Scheduler getScheduler() throws SchedulerException {
        SchedulerFactory schedulerFactory=new StdSchedulerFactory();
        return schedulerFactory.getScheduler();
    }

    /**
     * 定义任务细节并将其关联到实际的Job类
     */
    public static JobDetail defineJobDetailAndTieToRealJobClass(){
        JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();
        return job;
    }

    /**
     * 定义并获取trigger
     * @param runTime 触发开始时间
     * @return
     */
    public static Trigger getTrigger(Date runTime){
        Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();
        return trigger;
    }
    public void run() throws SchedulerException {
        Logger  logger= LoggerFactory.getLogger(SimpleTest1.class);
        //1.获取调度器
        Scheduler scheduler=getScheduler();
        //2.定义job并与实际jobClass关联
        JobDetail job= defineJobDetailAndTieToRealJobClass();
        //3.创建Trigger
        Date runTime=evenMinuteDate(new Date());
        Trigger trigger=getTrigger(runTime);
        //4.告诉Quartz使用我们的触发器来调度job
        scheduler.scheduleJob(job,trigger);
        //5.启动调度
        scheduler.start();

        try {
            logger.info("睡眠65s等待任务执行...");
            TimeUnit.SECONDS.sleep(75);
        } catch (InterruptedException e) {
            logger.error(e.getMessage());
        }
    }
    public static void main(String[] args) throws SchedulerException {
        new SimpleTest1().run();
    }
}

HelloJob完整代码:

/**
* Copyright (C), 2015-2018, Nxin
* FileName: HelloJob
* Author:   xff
* Date:     2018/5/26 11:00
* Description: 一个输出helllo world的简单job
* History:
* <author>          <time>          <version>          <desc>
* 作者姓名           修改时间           版本号              描述
*/
package com.feifei.test1;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* 〈一句话功能简述〉<br> 
* 〈一个输出helllo world的简单job〉
*
* @author xff
* @create 2018/5/26
* @since 1.0.0
*/
public class HelloJob implements Job{
   private static Logger logger = LoggerFactory.getLogger(HelloJob.class);
   @Override
   public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
       logger.info("hello world!!!");
   }
}

未完待续...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个...
    张晨辉Allen阅读 2,255评论 2 11
  • Quartz是一个完全由java编写的功能丰富的开源作业调度库,可以集成到几乎任何Java应用程序中,小到独立应用...
    ProteanBear阅读 7,193评论 3 24
  • 导语:作为java领域最受欢迎的任务调度库之一,quartz为开发者提供了丰富的任务调度功能,比如让某段程序在每天...
    star24阅读 24,220评论 8 60
  • 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动完成执行任务 在Java中的定时调度工具...
    Hey_Shaw阅读 2,563评论 2 1
  • 假期到了。爸爸说今天带你们去大泽山玩,我高兴极了。爸爸开车半个小时到了,在我们面前是又高又宽的一块石头,上面写着《...
    孙浩琳阅读 1,062评论 0 0