Quartz学习 之 入门

一、什么是 Quartz Scheduler

  Quartz Scheduler是一个特性丰富、开源的一个任务调度库,可以应用于所有的Java App。Quartz 可以创建简单和复杂的任务调度,可以执行几十、几百、上万个任务。任务被定义成标准的Java组件,可以执行任意的程序。Quartz Scheduler支持很多企业特性,譬如说 JTA事物和集群。

 

二、我们用 Quartz Scheduler 能做什么

  在你的应用中,有很多任务需要在时间的某一个时刻发生,或者有很多循环发生的任务,Quartz Scheduler 将会是你理想中的选择。

  1. Driving Process Workflow(驱动流程工作流):当一个新的秩序被初始化好,调度一个job在两个小时内触发,将会检查秩序的状态,如果某一个需要确认的信息还没有收到,就触发一个预警消息,同时将秩序的状态更新为 ‘等待调停’。

  2. 系统维护:在每天的某个固定的时间,将数据库的内容变成一个xml文件。

  3. 在应用中,提供提醒的服务。

 

三、Quartz 的特性

  特性一:Runtime Environments (运行时环境)

    1. Quartz 可以被植入到另外一个自由独立的应用中。

    2. Quartz 可以在应用中初始化,参入到XA 事物中。

    3. Quartz 可以作为一个独立的程序运行,譬如被使用到 远程接口调用中。

    4. Quartz 可以初始化为一个 job执行的独立程序的集群。

  特性二:Job Scheduling(任务跳读)

     当触发器发生,任务可以被调度执行。触发器包含以下指令:

      1. 一天中某一个时间。

      2. 一个星期的某一个时间。

      3. 一个月的某一个时间。

      4. 一年中的某一个时间。

      5. 注册的Calendar 列出来某一些不确定的时间(国庆节等)。

      6. 在某一段时间内重复一定的次数。

      7. 一直重复,直到某一个结束时间。

      8. 无限期的重复。

      9. 重复的延迟间隔。

      创建Job的时候可以给Job一个名称,然后放到一个组(group)中。触发器也可以有名称,放入到一个组里面,这样scheduler 就可以很好的去管理他们。Job可以加入到scheduler一次,但是可以注册到触发器多次。在企业Java环境中,Job可以执行的工作可以作为分布式事物中的一部分。

  特性三:Job Execution(任务执行)

      1. Job可以是实现了 Job接口的任意类。

      2. Job类的实例可以被Quartz初始化,也可以被你的Java应用初始化。

      3. 当触发器发生的时候,调度器可以通知零个或者多个实现了 JobListener 和 TriggerListener 接口的java对象。当Job已经执行的时候,这些监听器也会被唤醒。

      4. 当Job执行完成的时候,会返回一个 JobCompletionCode,通知调度器任务完成或者失败。JobCompletionCode可以来知道调度器接下来的一些动作。

  特性四:Job Persistence(Job持久化)

    1. 在Quartz的设计中,提供了一个 JobStore 接口,实现这个接口可以提供好各种各样机理的Job存储。

    2. 在使用 JDBCJobStore 时,所有的 Job 和 trgger 配置为 ‘non-volatile’,通过Jdbc保存在数据库中。

    3. 在使用 RAMJobStore 时,所有的 Job 和 trgger 保存在内存中,因此在程序执行的时候,没有持久化。

  特性五:Transactions(事物)

    1. 使用 JobStoreCMT , Quartz可以加入到 JTA 事物中。

    2. Quartz可以管理 Job执行上下文的 JTA 事物,所以 Job所执行的任务 会 在一个 JTA 事物中。

  特性六: Clustering Features(集群的特性)

    1. 提供了 容错机制。

    2. 提供了负载均衡机制。

    3. Quartz 的 集群特性 依赖于 数据库持久(由JDBCJobStore 实现的)。

    4. Terracotta  扩展了 Quartz, 提供了集群的能力而不需要后端的数据库。

  特性七:Listeners & Plug-Ins(监听器和插件)

    1. 应用可以捕获到 调度的事件,从而可以监听和控制 Job和Trgger 的行为。

    2. 插件的机理 可以 给 Quartz 增加一些功能,例如: 保存Job执行的历史记录,从文件中加载 Job 和 触发器。

    3. Quartz 提供了 一些工厂方法,可以创建 一些 插件和监听器。

  四、 Quartz 的一个简单应用Demo

    Job的实现代码:

package net.qh.test.job;

import org.quartz.Job;
import org.quartz.JobExecutionContext;

/**
 * Created by Administrator on 2016/03/28.
 */
public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) {

        String msg = " hello My Job, fire-time:"+jobExecutionContext.getFireTime()
                +", InstanceId:"+jobExecutionContext.getFireInstanceId()
                +", JobRunTime: "+jobExecutionContext.getJobRunTime()
                +", key:"+jobExecutionContext.getMergedJobDataMap().get("key");
        System.out.println(msg);
    }
}

  Main方法:

package net.qh.test.job;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.util.Collections;

/**
 * Created by Administrator on 2016/03/28.
 */
public class Demo {

    public static void main(String[] args) throws SchedulerException {
        Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        scheduler.start();

        JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .usingJobData(new JobDataMap(Collections.singletonMap("key","value")))
                .withIdentity("myJob", "myGroup")
                .build();
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "myGroup")
                .startNow()
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever())
                .build();
        scheduler.scheduleJob(jobDetail,trigger);
    }

}

  运行输出:

log4j:WARN No appenders could be found for logger (org.quartz.impl.StdSchedulerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
 hello My Job, fire-time:Tue Mar 29 13:57:24 GMT+08:00 2016, InstanceId:1459231044819, JobRunTime: -1, key:value
 hello My Job, fire-time:Tue Mar 29 13:57:29 GMT+08:00 2016, InstanceId:1459231044820, JobRunTime: -1, key:value
 hello My Job, fire-time:Tue Mar 29 13:57:34 GMT+08:00 2016, InstanceId:1459231044821, JobRunTime: -1, key:value
 hello My Job, fire-time:Tue Mar 29 13:57:39 GMT+08:00 2016, InstanceId:1459231044822, JobRunTime: -1, key:value
 hello My Job, fire-time:Tue Mar 29 13:57:44 GMT+08:00 2016, InstanceId:1459231044823, JobRunTime: -1, key:value
 hello My Job, fire-time:Tue Mar 29 13:57:49 GMT+08:00 2016, InstanceId:1459231044824, JobRunTime: -1, key:value

  

 

转载于:https://www.cnblogs.com/aDiot/p/5332150.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值