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包。

  1. <dependency>
  2. <groupId>org.quartz-scheduler</groupId>
  3. <artifactId>quartz</artifactId>
  4. <version>2.2.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.quartz-scheduler</groupId>
  8. <artifactId>quartz-jobs</artifactId>
  9. <version>2.2.1</version>
  10. </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

  1. package org.ws.quartz.test1;
  2.  
  3. import org.quartz.Job;
  4. import org.quartz.JobExecutionContext;
  5. import org.quartz.JobExecutionException;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8.  
  9. public class HelloWorldJob implements Job{
  10.  
  11. private static Logger logger = LoggerFactory.getLogger(HelloWorldJob.class);
  12.  
  13. @Override
  14. public void execute(JobExecutionContext context) throws JobExecutionException {
  15. logger.info("Hello World");
  16. }
  17. }

HelloWorldJob

(2) 调度主方法

  1. package org.ws.quartz.test1;
  2.  
  3. import org.quartz.JobBuilder;
  4. import org.quartz.JobDetail;
  5. import org.quartz.Scheduler;
  6. import org.quartz.SchedulerException;
  7. import org.quartz.SimpleScheduleBuilder;
  8. import org.quartz.Trigger;
  9. import org.quartz.TriggerBuilder;
  10. import org.quartz.impl.StdSchedulerFactory;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13.  
  14. public class SimpleQuartzExample {
  15.  
  16. private static Logger logger = LoggerFactory.getLogger(SimpleQuartzExample.class);
  17.  
  18. public static void main(String[] args) throws SchedulerException, InterruptedException {
  19.  
  20. SimpleQuartzExample exam = new SimpleQuartzExample();
  21.  
  22. logger.info("init scheduler componets");
  23.  
  24. // 创建任务
  25. JobDetail jobDetail = exam.createJobDetail();
  26.  
  27. // 创建触发器
  28. Trigger trigger = exam.createTrigger();
  29.  
  30. // 创建调度器
  31. Scheduler scheduler = exam.createScheduler();
  32.  
  33. // 构建调度任务
  34. scheduler.scheduleJob(jobDetail, trigger);
  35.  
  36. logger.info("execute scheduler");
  37. // 开启调度器
  38. scheduler.start();
  39.  
  40. // 一分钟后关闭调度器
  41. Thread.sleep(60000);
  42. scheduler.shutdown();
  43.  
  44. logger.info("shut down scheduler");
  45. }
  46.  
  47. protected Scheduler createScheduler() throws SchedulerException{
  48. return StdSchedulerFactory.getDefaultScheduler();
  49. }
  50.  
  51. protected JobDetail createJobDetail(){
  52. return JobBuilder.newJob(HelloWorldJob.class) // 待执行的任务
  53. .withIdentity("HelloWorld_Job", "HelloWorld_Group") // 名称与组名组成Scheduler中任务的唯一标识
  54. .build(); // 构建
  55. }
  56.  
  57. protected Trigger createTrigger(){
  58. return TriggerBuilder.newTrigger()
  59. .withIdentity("HelloWorld_Trigger", "HelloWorld_Group") // 名称与组名组成Scheduler中触发器的唯一标识
  60. .withSchedule(
  61. SimpleScheduleBuilder.simpleSchedule() // 创建SimpleTrigger
  62. .withIntervalInSeconds(10) // 10秒间隔
  63. .repeatForever() // 重复循环
  64. ).build(); // 构建
  65. }
  66. }

SimpleQuartzExample

(3) 运行结果

  1. 2017-07-09 12:51:10 [INFO]-[org.ws.quartz.test1.SimpleQuartzExample] init scheduler componets
  2. 2017-07-09 12:51:11 [INFO]-[org.ws.quartz.test1.SimpleQuartzExample] execute scheduler
  3. 2017-07-09 12:51:11 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
  4. 2017-07-09 12:51:21 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
  5. 2017-07-09 12:51:31 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
  6. 2017-07-09 12:51:41 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
  7. 2017-07-09 12:51:51 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
  8. 2017-07-09 12:52:01 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
  9. 2017-07-09 12:52:11 [INFO]-[org.ws.quartz.test1.HelloWorldJob] Hello World
  10. 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的更多相关文章

  1. 初识Quartz之第一个Quartz实例

    转: 初识Quartz之第一个Quartz实例 2018年04月09日 17:07:31 carson0408 阅读数:366   版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...

  2. 初识quartz 并分析 项目中spring整合quartz的配置【原创+转载】

    初识quartz 并分析 项目中spring整合quartz的配置[原创+转载]2018年01月29日 12:08:07 守望dfdfdf 阅读数:114 标签: quartz 更多个人分类: 工具 ...

  3. 初识Quartz(入门案例)+常用的Cron表达式

    1.Quartz架构图 1.实体层 package cn.happy.entity; //1. public class Plan { //时间 private String date; //任务 p ...

  4. 初识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 ...

  5. 初识Quartz(三)

    本文将介绍CronTrigger的使用方法,CronTrigger相比 SimpleTrigger可以支持更复杂的作业计划.cron这一观念来自UNIX,在UNIX中,cron是一个运行于后台的守护程 ...

  6. 初识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 ...

  7. 1.初识Quartz

    开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/QuartzDemo.git 前言: 接触一个新事物的开始,我们都会产生一些疑问: Quartz是什 ...

  8. Quartz学习——Spring和Quartz集成详解(三)

    Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度.下面就对Spring集成Quartz进行简单的介绍和示例讲解!和上一节 Quar ...

  9. Quartz学习--二 Hello Quartz! 和源码分析

    Quartz学习--二  Hello Quartz! 和源码分析 三.  Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...

随机推荐

  1. 动态绑数据(GridView控件Header和ItemTemplate)

    想了解此篇文章,建议先预习一下<动态变更GridView控件列名>http://www.cnblogs.com/insus/p/3232057.html,因为多少有些关联.不管怎样,它能够 ...

  2. yum(Fedora和RedHat以及SUSE中的Shell前端软件包管理器)命令详解

    yum官方网站:http://yum.baseurl.org/ Fedora对于yum的介绍:http://fedoraproject.org/wiki/Yum yum(全称为 Yellow dog ...

  3. 编译原理-First集和Follow集

    刚学first集和follow集的时候,如果上课老师没有讲明白或者自己没听明白,自己看的时候还真是有点难理解,不过结合着具体的题目可以理解的更快. 先看一下两种集合的求法: First集合的求法:   ...

  4. mysql5.7 Your password does not satisfy the current policy requirements问题解决

    安装mysql5.7rpm包,在更改密码的时候,提示错误 这是由于Mysql5.7默认对于密码的要求强度较高,设置的密码过于简单不予通过.要解决这个问题,涉及到的参数有validate_passwor ...

  5. poj1811(pollard_rho模板)

    题目链接: http://poj.org/problem?id=1811 题意: 判断一个数 n (2 <= n < 2^54)是否为质数, 是的话输出 "Prime" ...

  6. SP8791 DYNALCA - Dynamic LCA

    \(\color{#0066ff}{ 题目描述 }\) 有一个森林最初由 n (\(1 \le n \le 100000\))n(\(1\leq n\leq 100000\)) 个互不相连的点构成 你 ...

  7. iOS端VR视频播放(转自简书http://www.jianshu.com/p/1ee1a0d1d320)

    下面是我看了谷歌的一个VR在iOS端开发的文档写的一个demo. 第一步是需要用cocoaPods导入谷歌开发的一个第三方:CardboardSDK,怎么导入就不多说了,这里需要注意的一点是谷歌方面的 ...

  8. 统计元音(stringstream的-应用)

    Problem Description 统计每个元音字母在字符串中出现的次数.   Input 输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串.   Output ...

  9. Java实现微信小程序支付(准备)

    Java语言开发微信小程序支付功能: 1.通过https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1路径到官方下载Java的支付SD ...

  10. redis启动后出现"WARNING you have Transparent Huge Pages (THP) support enabled in your kernel"问题

    问题描述:启动redis后出现:WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This w ...