简介  

  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. Alpha冲刺-(9/10)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 进一步优化代码,结合自己负责的部分修 ...

  2. Ngui分辨率适配

    必备知识点 1.分辨率适配必然是Orthographic Camera 2.Camera下对应的“Size”(图1)属性大小的理解:当前摄像机高度 = Size * 2 * UnityUnit(Uni ...

  3. Batch Normalization--介绍

    思考 YJango的前馈神经网络--代码LV3的数据预处理中提到过:在数据预处理阶段,数据会被标准化(减掉平均值.除以标准差),以降低不同样本间的差异性,使建模变得相对简单. 我们又知道神经网络中的每 ...

  4. 网易易盾最新一代Java2c加固究竟有什么厉害之处?

    导语:几个月前,网易易盾正式推出Java2c加固.它以独有的"静态保护"技术,使得应用程序中的代码出现"下沉",达到不可逆的效果,兼顾"冷热启动时间& ...

  5. MyBatis 源码分析 - 配置文件解析过程

    * 本文速览 由于本篇文章篇幅比较大,所以这里拿出一节对本文进行快速概括.本篇文章对 MyBatis 配置文件中常用配置的解析过程进行了较为详细的介绍和分析,包括但不限于settings,typeAl ...

  6. c++ 异常处理(1)

    异常 (exception) 是 c++ 中新增的一个特性,它提供了一种新的方式来结构化地处理错误,使得程序可以很方便地把异常处理与出错的程序分离,而且在使用上,它语法相当地简洁,以至于会让人错觉觉得 ...

  7. Eclipse 中打包插件 Fat Jar 的安装与使用

    Eclipse可以安装一个叫Fat Jar的插件,用这个插件打包非常方便,Fat Jar的功能非常强大. 首先要下载Fat Jar,下载地址:https://sourceforge.net/proje ...

  8. liunx下判断有线网口硬件是否正常的三个常用方式

    第一种,命令法: /mnt/wifi$ cat /proc/net/dev Inter-|  Receive                                              ...

  9. linux系统学习方法分享

    初学者可以自己安装虚拟机,然后把 linux 常用命令例如 cd.ls.chmod.useradd.vi 等等多练习几十遍,把自己敲打命令的熟练程度提升上来.然后根据文档搭建 Linux 下常见的各种 ...

  10. HttpServletRequest简介

    HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息. 常用方 ...