【Quartz】1、Quartz使用说明
简介
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使用说明的更多相关文章
- Quartz学习——Quartz大致介绍(一)
1. 介绍 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,"任务进度管理器"就是 ...
- Quartz学习-- quartz基本介绍和 Cron表达式
Quartz学习 一. Quartz 大致简介 Quartz 是完全由 java 开发的一个开源的任务日程管理系统 任务日程管理系统 换句话说就是: 一个预先确定的日程时间到达时,负责执行任务的 ...
- 企业级任务调度框架Quartz(5) Quartz的声明式配置
前序: 前面我们已经通过编程的方式实现了多个作业任务执行具体操作的演示:但具体到实际的时候,如果我们要在 Job 启动之后改变它的执行时间和频度,则必须去修改源代码重新编译,我们很难去以编程的 ...
- Quartz:Quartz
ylbtech-Quartz:Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Qu ...
- Quartz学习——Quartz大致介绍 转
转自阿飞先生 http://blog.csdn.net/u010648555/article/details/54863144 1. 介绍 Quartz是OpenSymphony开源组织在Job sc ...
- 【Quartz】Quartz存储与持久化-基于quartz.properties的配置
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一. Quartz存储与持久化 Quartz提供两种基本作业存储类型.第一种类型叫做RAM ...
- Quartz 之Quartz Cron表达式
说到这个Quartz了,必不可少的就要说到我们的Triggger触发器,相信大家也都知道,我们在之前也说过了,Trigger又有两个子类,也就是两种方式,分别是:SimpleTrigger和CronT ...
- 【Quartz】Quartz的搭建、应用(单独使用Quartz)
Quartz在Java构建的系统中,是十分常用的定时任务框架. 本文,记录.介绍Quartz的简单入门的单独搭建(此文入门学习Quartz为主,并非基于Spring托管形式). > 参考的优秀资 ...
- Quartz学习——Quartz简单入门Demo(二)
要学习Quartz框架,首先大概了解了Quartz的基本知识后,在通过简单的例子入门,一步一个脚印的走下去. 下面介绍Quartz入门的示例,由于Quartz的存储方式分为RAM和JDBC,分别对这两 ...
- 【Quartz】Quartz将Job保存在数据库中所需表的说明
QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息 ...
随机推荐
- Dockerfile 构建容器
本文是最简单的Dockerfile教程,创建tomcat容器,并跑自己的java程序 首先需要准备几个东西 1.你的java web(test.war) 程序,最好打包成一个 war:(主要是没测试 ...
- django自定义user认证系统
第一种,彻底推翻django的user认证系统,重新定义我们想要的字段 from django.contrib.auth.models import AbstractBaseUser,Permissi ...
- mysql windows 5.7 安装版下载地址
https://dev.mysql.com/downloads/windows/installer/5.7.html
- Mac键盘按键符号
通过修饰键来查看 像command.option.control.shift这些按键在Mac下叫做修饰键,一般情况下他们大都用来辅助输入或者用作快捷键的修饰键. 打开“系统偏好设置”,点击“键盘→键盘 ...
- 程序猿的日常——工作中常用的Shell脚本
工作当中总是会有很多常用的linux或者命令,这里就做一个总结 文件远程拷贝 如果想把文件从本机拷贝到远程,或者从远程下载文件到本地. # 把本地的jar拷贝到远程机器xxxip的/home/sour ...
- 分布式控制系统Git学习
git : n. 饭桶,无用的人 github : n. 社交编程及代码托管网站 hub: n. 中心:毂:木片 Git是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创 ...
- CentOS第一次安装MySQL的完整步骤
文章来自:http://www.jianshu.com/p/4a41a6df19a6,我自己调整了下 1.官方安装文档 http://dev.mysql.com/doc/mysql-yum-repo- ...
- 【2019北京集训测试赛(七)】 操作 分治+FFT+生成函数
题目大意:你有$n$个操作和一个初始为$0$的变量$x$. 第$i$个操作为:以$P_i$的概率给$x$加上$A_i$,剩下$1-P_i$的概率给$x$乘上$B_i$. 你袭击生成了一个长度为$n$的 ...
- vue项目打包上线时的配置操作
vue的图片路径,和背景图片路径打包后错误解决 2017-12-11 16:00 by muamaker, 7037 阅读, 0 评论, 收藏, 编辑 最近在研究vue,老实的按照官网提供的,搭建的了 ...
- PL/SQL Developer从11.0.6版本开始32/64为之区分
PL/SQL Developer从11.0.6版本开始32/64为之区分 在PL/SQL Developer11.0.6版本之前,64位Windows操作系统在使用PL/SQL Developer都未 ...