简介  

  Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。虽然可以通过属性文件(在属性文件中可以指定 JDBC 事务的数据源、全局作业和/或触发器侦听器、插件、线程池,以及更多)配置 Quartz,但它根本没有与应用程序服务器的上下文或引用集成在一起。结果就是作业不能访问 Web 服务器的内部函数;例如,在使用 WebSphere 应用服务器时,由 Quartz 调度的作业并不能影响服务器的动态缓存和数据源。

使用前奏

  1. 新建一个maven项目(可以是web也可以是普通的java项目),添加上相关依赖。

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<quartz.version>2.2.0</quartz.version>
</properties> <dependencies>
....
<!--quartz dependency-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>${quartz.version}</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
</dependency>
</dependencies>

  2. 在resources下新建一个配置文件quartz.properties,添加如下内容:

org.quartz.scheduler.instanceName = MyScheduler #指定调度器的名称
org.quartz.threadPool.threadCount = 3 #线程池中最多同时有3个线程运行
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore #指定Quartz的数据(job及trigger信息)存储位置,RamJobStore指内存

启动一个Scheduler

package com.netease.test.quartz;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory; /**
* User: hzwangxx
* Date: 14-2-26
* Time: 0:16
*/
public class QuartzTest {
public static void main(String[] args) {
try {
//1.从StdSchedulerFactory工厂中获取一个任务调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); //2. 启动调度器
scheduler.start();
System.out.println("scheduler is start..."); //关闭调度器
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
/*
console output:
2014-02-26 00:22:31,744 0 [main] INFO - Using default implementation for ThreadExecutor
2014-02-26 00:22:31,766 22 [main] INFO - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2014-02-26 00:22:31,767 23 [main] INFO - Quartz Scheduler v.2.2.0 created.
2014-02-26 00:22:31,768 24 [main] INFO - RAMJobStore initialized.
2014-02-26 00:22:31,769 25 [main] INFO - Scheduler meta-data: Quartz Scheduler (v2.2.0) 'MyScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. 2014-02-26 00:22:31,769 25 [main] INFO - Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2014-02-26 00:22:31,769 25 [main] INFO - Quartz scheduler version: 2.2.0
2014-02-26 00:22:31,769 25 [main] INFO - Scheduler MyScheduler_$_NON_CLUSTERED started.
scheduler is start...
2014-02-26 00:22:31,769 25 [main] INFO - Scheduler MyScheduler_$_NON_CLUSTERED shutting down.
2014-02-26 00:22:31,770 26 [main] INFO - Scheduler MyScheduler_$_NON_CLUSTERED paused.
2014-02-26 00:22:31,770 26 [main] INFO - Scheduler MyScheduler_$_NON_CLUSTERED shutdown complete.
*/

简单Helloworld

package com.netease.test.quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory; import java.util.Date; import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger; /**
* User: hzwangxx
* Date: 14-2-26
* Time: 0:16
*/
public class QuartzTest {
public static void main(String[] args) {
try {
//1.从StdSchedulerFactory工厂中获取一个任务调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); //2. 启动调度器
scheduler.start();
System.out.println("scheduler is start...");
//3. 添加定时任务
// 3.1 定义job
JobDetail job = newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build(); // 3.2 定义Trigger,使得job现在就运行,并每隔3s中运行一次,重复运行5次, withRepeatCount(number)设定job运行次数为number+1
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(3)
.withRepeatCount(4))
.build(); // 3.3 交给scheduler去调度
scheduler.scheduleJob(job, trigger);
//4. 关闭调度器
//scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
} /**
* 自定义Job,实现Job接口并实现execute方法
*/
public static class HelloJob implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("execute job at " + new Date() + " by trigger " + context.getTrigger().getJobKey());
}
}
}
/*
console output:
2014-02-26 01:05:25,766 0 [main] INFO - Using default implementation for ThreadExecutor
2014-02-26 01:05:25,794 28 [main] INFO - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2014-02-26 01:05:25,795 29 [main] INFO - Quartz Scheduler v.2.2.0 created.
2014-02-26 01:05:25,797 31 [main] INFO - RAMJobStore initialized.
2014-02-26 01:05:25,798 32 [main] INFO - Scheduler meta-data: Quartz Scheduler (v2.2.0) 'MyScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. 2014-02-26 01:05:25,798 32 [main] INFO - Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2014-02-26 01:05:25,799 33 [main] INFO - Quartz scheduler version: 2.2.0
2014-02-26 01:05:25,799 33 [main] INFO - Scheduler MyScheduler_$_NON_CLUSTERED started.
scheduler is start...
execute job at Wed Feb 26 01:05:25 CST 2014 by trigger group1.job1
execute job at Wed Feb 26 01:05:28 CST 2014 by trigger group1.job1
execute job at Wed Feb 26 01:05:31 CST 2014 by trigger group1.job1
execute job at Wed Feb 26 01:05:34 CST 2014 by trigger group1.job1
execute job at Wed Feb 26 01:05:37 CST 2014 by trigger group1.job1 */

API说明

Quartz框架核心的几个类如下:

  • Scheduler - 与scheduler进行交互的主要API,整个生命周期是由SchedulerFactory创建到调用shutdown()方法
  • Job - 希望scheduler进行调度的自定义任务接口,主要实现该接口的execute方法。
  • JobDetail - 定义Job的相关信息
  • Trigger - 定义调度器调度任务的触发器,主要描述任务的执行时间,周期等信息
  • JobBuilder - 用来定义和创建JobDetail实例
  • TriggerBuilder - 用来定义和创建Trigger实例

转自:http://www.cnblogs.com/nexiyi/p/quartz_quick_start.html

【Quartz】1、Quartz使用说明的更多相关文章

  1. Quartz学习——Quartz大致介绍(一)

    1. 介绍 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,"任务进度管理器"就是 ...

  2. Quartz学习-- quartz基本介绍和 Cron表达式

    Quartz学习 一. Quartz 大致简介 Quartz 是完全由 java 开发的一个开源的任务日程管理系统 ​任务日程管理系统 换句话说就是: ​ 一个预先确定的日程时间到达时,负责执行任务的 ...

  3. 企业级任务调度框架Quartz(5) Quartz的声明式配置

    前序:     前面我们已经通过编程的方式实现了多个作业任务执行具体操作的演示:但具体到实际的时候,如果我们要在 Job 启动之后改变它的执行时间和频度,则必须去修改源代码重新编译,我们很难去以编程的 ...

  4. Quartz:Quartz

    ylbtech-Quartz:Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Qu ...

  5. Quartz学习——Quartz大致介绍 转

    转自阿飞先生 http://blog.csdn.net/u010648555/article/details/54863144 1. 介绍 Quartz是OpenSymphony开源组织在Job sc ...

  6. 【Quartz】Quartz存储与持久化-基于quartz.properties的配置

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.   Quartz存储与持久化 Quartz提供两种基本作业存储类型.第一种类型叫做RAM ...

  7. Quartz 之Quartz Cron表达式

    说到这个Quartz了,必不可少的就要说到我们的Triggger触发器,相信大家也都知道,我们在之前也说过了,Trigger又有两个子类,也就是两种方式,分别是:SimpleTrigger和CronT ...

  8. 【Quartz】Quartz的搭建、应用(单独使用Quartz)

    Quartz在Java构建的系统中,是十分常用的定时任务框架. 本文,记录.介绍Quartz的简单入门的单独搭建(此文入门学习Quartz为主,并非基于Spring托管形式). > 参考的优秀资 ...

  9. Quartz学习——Quartz简单入门Demo(二)

    要学习Quartz框架,首先大概了解了Quartz的基本知识后,在通过简单的例子入门,一步一个脚印的走下去. 下面介绍Quartz入门的示例,由于Quartz的存储方式分为RAM和JDBC,分别对这两 ...

  10. 【Quartz】Quartz将Job保存在数据库中所需表的说明

    QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息  ...

随机推荐

  1. Nginx unit 源码安装初体验

    Nginx unit 源码安装初体验 上次介绍了从yum的安装方法(https://www.cnblogs.com/wang-li/p/9684040.html),这次将介绍源码安装,目前最新版为1. ...

  2. java 基础--理论知识

    变量分:局部变量全局变量-----------------------------------------------------变量三大特性[标识符,初始值,作用域]定义变量:语法:[访问修饰符] ...

  3. visual2017专业版MFC编程环境搭建及第一个MFC程序的创建

    1.MFC介绍及环境搭建 MFC全程为Microsoft Foundation class Library,即微软的基本类库,MFC实际上是一个庞大的文件库,它由指向文件和源文件组成. 首先,打开vi ...

  4. 770. Basic Calculator IV

    Given an expression such as expression = "e + 8 - a + 5" and an evaluation map such as {&q ...

  5. 利用PHP扩展Taint找出网站的潜在安全漏洞实践

    一.背景 笔者从接触计算机后就对网络安全一直比较感兴趣,在做PHP开发后对web安全一直比较关注,2016时无意中发现Taint这个扩展,体验之后发现确实好用:不过当时在查询相关资料时候发现关注此扩展 ...

  6. 移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”

    本系列文章引用了腾讯技术专家樊华恒<海量之道系列文章之弱联网优化>的部分章节,感谢原作者. 1.前言 随着移动互联网的高速发展,移动端IM以移动网络作为物理通信载体早已深入人心,这其中的成 ...

  7. WebRTC学习之ICE深入理解

    ICE(交互式连接建立---Interactive Connectivity Establishment),是一种标准穿透协议.它利用STUN和TURN服务器来帮助端点建立连接.下图显示了ICE的基本 ...

  8. JS禁用键盘浏览器退格键

    我们在真实的项目开发中经常会使用JS 对键盘上的一些按键进行禁用,常见的比如说退格键(backspace/ 后退键),我在一个项目中就遇到过在页面编辑的时候禁用掉退格键,因为退格键会发生页面后退,这样 ...

  9. Java学习笔记36(File类)

    File类可以对操作系统中的文件进行操作: File类的静态成员变量: package demo; import java.io.File; public class FileDemo { publi ...

  10. OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 5.在控制节点上部署计算服务Nova

    计算服务Nova使用OpenStack Compute来托管和管理云计算系统. OpenStack Compute是基础架构即服务(IaaS)系统的主要部分. 主要模块用Python实现.OpenSt ...