Quartz使用(1) - 初识quartz
1. 背景
由于最新的工作项目中,需要使用quartz框架,以完成相关的任务的定时执行。经过两周的调研与使用,本系列博客会参考官网及网上相关博客,结合工作项目中的使用,详细介绍quartz的各个方面。如果有相关的错误,烦请不吝赐教。如果有相关的疑惑,可以评论,本人会抽空解答。
2. quartz是什么?
Quartz is a richly featured, open source job scheduling library that can be integrated within virtually any Java application - from the smallest stand-alone application to the largest e-commerce system. Quartz can be used to create simple or complex schedules for executing tens, hundreds, or even tens-of-thousands of jobs; jobs whose tasks are defined as standard Java components that may execute virtually anything you may program them to do. The Quartz Scheduler includes many enterprise-class features, such as support for JTA transactions and clustering.
基于官网解释,可以看出quartz是开源且具有丰富特性的"任务调度库",能够集成于任何的java应用,小到独立的应用,大至电子商业系统。quartz能够创建亦简单亦复杂的调度,以执行上十、上百,甚至上万的任务。任务job被定义为标准的java组件,能够执行任何你想要实现的功能。quartz调度框架包含许多企业级的特性,如JTA事务、集群的支持。
简而言之,quartz就是基于java实现的任务调度框架,用于执行你想要执行的任何任务。其次,quartz也支持.Net平台。
3. quartz的下载
quartz目前的最新版本为quartz-2.2.3,下载有两种方式,完整包或Maven依赖。
(1) 完整包的下载
完整包的下载地址:quartz-2.2.3-distribution.tar.gz,完整包中包含例子、源码、依赖以及说明文档等
(2) Maven依赖的导入
官网目前提供的Maven依赖为2.2.1,mvnrepository目前已支持2.3.0,版本之间的更新特性本人尚未研究。quartz的依赖至少有sl4j-api相关的jar包。
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
quartz的Maven依赖
4. quartz的主要模块
quart主要有三个核心模块:Scheduler、Job、Trigger
(1) Job
Job就是你想要实现的任务类,每一个Job必须实现org.quartz.job接口,且只需实现接口定义的execute()方法。
(2) Trigger
Trigger为你执行任务的触发器,比如你想每天定时3点发送一份统计邮件,Trigger将会设置3点进行执行该任务。Trigger主要包含两种SimpleTrigger和CronTrigger两种。关于二者的区别的使用场景,后续文章会进行讨论。
(3) Scheduler
Scheduler为任务的调度器,它会将任务job及触发器Trigger整合起来,负责基于Trigger设定的时间来执行Job。
5. quartz的简单使用
例:现在想要实现一个每10秒打印一次"Hello World"的任务。
(1) 定义任务Job
package org.ws.quartz.test1; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class HelloWorldJob implements Job{ private static Logger logger = LoggerFactory.getLogger(HelloWorldJob.class); @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
logger.info("Hello World");
}
}
HelloWorldJob
(2) 调度主方法
package org.ws.quartz.test1; import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class SimpleQuartzExample { private static Logger logger = LoggerFactory.getLogger(SimpleQuartzExample.class); public static void main(String[] args) throws SchedulerException, InterruptedException { SimpleQuartzExample exam = new SimpleQuartzExample(); logger.info("init scheduler componets"); // 创建任务
JobDetail jobDetail = exam.createJobDetail(); // 创建触发器
Trigger trigger = exam.createTrigger(); // 创建调度器
Scheduler scheduler = exam.createScheduler(); // 构建调度任务
scheduler.scheduleJob(jobDetail, trigger); logger.info("execute scheduler");
// 开启调度器
scheduler.start(); // 一分钟后关闭调度器
Thread.sleep(60000);
scheduler.shutdown(); logger.info("shut down scheduler");
} protected Scheduler createScheduler() throws SchedulerException{
return StdSchedulerFactory.getDefaultScheduler();
} protected JobDetail createJobDetail(){
return JobBuilder.newJob(HelloWorldJob.class) // 待执行的任务
.withIdentity("HelloWorld_Job", "HelloWorld_Group") // 名称与组名组成Scheduler中任务的唯一标识
.build(); // 构建
} protected Trigger createTrigger(){
return TriggerBuilder.newTrigger()
.withIdentity("HelloWorld_Trigger", "HelloWorld_Group") // 名称与组名组成Scheduler中触发器的唯一标识
.withSchedule(
SimpleScheduleBuilder.simpleSchedule() // 创建SimpleTrigger
.withIntervalInSeconds(10) // 10秒间隔
.repeatForever() // 重复循环
).build(); // 构建
}
}
SimpleQuartzExample
(3) 运行结果
2017-07-09 12:51:10 [INFO]-[org.ws.quartz.test1.SimpleQuartzExample] init scheduler componets
2017-07-09 12:51:11 [INFO]-[org.ws.quartz.test1.SimpleQuartzExample] execute scheduler
2017-07-09 12:51:11 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
2017-07-09 12:51:21 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
2017-07-09 12:51:31 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
2017-07-09 12:51:41 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
2017-07-09 12:51:51 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
2017-07-09 12:52:01 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
2017-07-09 12:52:11 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
2017-07-09 12:52:11 [INFO]-[org.ws.quartz.test1.SimpleQuartzExample] shut down scheduler
console_log
(4) 分析
该例简单说明了quartz的基本使用方式,构建调度器使用标准工厂中的默认调度器StdSchedulerFactory.getDefaultScheduler(),Job由JobBuilder进行构建,使用简单触发器SimpleTrigger,调度器的开启直接使用scheduler.start()开启即可,关闭时,调度器shutdown()方法。
Quartz使用(1) - 初识quartz的更多相关文章
- 初识Quartz之第一个Quartz实例
转: 初识Quartz之第一个Quartz实例 2018年04月09日 17:07:31 carson0408 阅读数:366 版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...
- 初识quartz 并分析 项目中spring整合quartz的配置【原创+转载】
初识quartz 并分析 项目中spring整合quartz的配置[原创+转载]2018年01月29日 12:08:07 守望dfdfdf 阅读数:114 标签: quartz 更多个人分类: 工具 ...
- 初识Quartz(入门案例)+常用的Cron表达式
1.Quartz架构图 1.实体层 package cn.happy.entity; //1. public class Plan { //时间 private String date; //任务 p ...
- 初识Quartz(二)
简单作业: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package quartz_pr ...
- 初识Quartz(三)
本文将介绍CronTrigger的使用方法,CronTrigger相比 SimpleTrigger可以支持更复杂的作业计划.cron这一观念来自UNIX,在UNIX中,cron是一个运行于后台的守护程 ...
- 初识Quartz(一)
首先需要一个任务: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package quartz_proj ...
- 1.初识Quartz
开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/QuartzDemo.git 前言: 接触一个新事物的开始,我们都会产生一些疑问: Quartz是什 ...
- Quartz学习——Spring和Quartz集成详解(三)
Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度.下面就对Spring集成Quartz进行简单的介绍和示例讲解!和上一节 Quar ...
- Quartz学习--二 Hello Quartz! 和源码分析
Quartz学习--二 Hello Quartz! 和源码分析 三. Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...
随机推荐
- Oracle SQL判断字符串是否在目标字符串中的函数
转自:http://dacoolbaby.iteye.com/blog/1772156 根据需求,写了一段方法. 用于识别以下的情况: 判断 字符串A 在用逗号分隔的字符串B中是否存在 如: v_s ...
- vtk-py求3d模型表面积
模型格式:.obj 环境:python3.6+vtk7.1 vtk版: import vtk filename = "XXXX.obj" reader = vtk.vtkOBJRe ...
- P1080 国王游戏
题意: 让n 位大臣排成一排,国王站在队伍的最前面. 排好队后,所有的大臣都会获得国王奖赏的若干金币, 每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向 ...
- SURF特征识别
如果对Surf的探究或者使用到此为止,我觉得只是用Surf这把牛刀吓唬了一个小鸡仔,万里长征才刚刚开始第一步,最少有三个问题需要得到解答: 1. 保存特征点信息的keyPoints向量内每个元素包含有 ...
- Python-6-字典-函数dict,字典的基本操作及将字符串设置功能用于字典
phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} 字典由键及其相应的值组成,这种键-值对称为项. 键必须为独一无二,值不必如 ...
- 使用lombok 简化代码
第一步:添加依赖 第二步:下载 lombok jar 包 第三步 :打开cmd 命令行 执行命令, -javaagent:lombok.jar -Xbootclasspath/a:lombok.ja ...
- Go语言基础之1--标识符、关键字、变量和常量、数据类型、Go的基本程序结构、Golang的特性
一.前言 当我们项目较为简单时,我们在src目录下新建一个该项目目录,里面存放源码文件即可,见下图: 当我们一个项目较为复杂时,我们可以在src目录下新建一个该项目目录,在针对该项目不同模块创建不同目 ...
- idea(3)-jetty配置
1.jetty&jdk版本 9.3----->1.8 9.2----->1.7 8------->1.6 2.pom.xml <plugin> <group ...
- Yii2 urles
public function rules(){ return [ //必须填写 ['email, username, password,agree,verifyPassword,verifyCode ...
- 下载,安装oracle数据库以及navicat连接数据库
一.学习时所遇问题: 1.在下载之前以为oracle不是免费的,但是后来才知道oracle对于个人学习时是免费的,可以到官网下载安装.在下载时由于要注册oracle官网,所以尝试了好几遍,才成功下载o ...