Quartz使用及注意事项

前提:目前由于公司业务决定,大量使用Quartz,每天固定的时间点执行相应的业务逻辑,,几十个时间点应该是有的,某一个时间点如果没有执行带来的问题是巨大的。Quartz的稳定性、简单性大大的降低的开发维护成本。

放一个简单的Demo:https://github.com/Aresyl/LY.Quartz.git

1:Quartz 简介
Quartz是一个开源的作业调度框架,Quartz根据用户设定的时间规则来执行作业。Quartz主要分为:

a:scheduler就是任务调度器。

b:trigger就是触发器,用于定义任务调度时间规则 ,支持Cron表达式。文章最后给出几种常见的Cron表达式。

c:job就是作业即任务,即被调度的任务。在Job里Execute(IJobExecutionContext context)方法里面写业务即可,参数context 带有Job 的一些相关信息。

2:作业加载方式:

Quartz支持村代码添加作业,数据库加载,配置文件等等。这里讲下配置文件方式。配置文件主要包含:quartz.config、quartz_jobs.xml。

1:quartz.config:quartz 基础配置,包括:threadPool、plugin、exporter等一些信息。

2:quartz_jobs.xml:作业配置。每个schedule为一个计划,schedule节点下trigger为触发条件,可以为Job配置多个schedule,一个schedule也可以有多个trigger。

 特注:

1:时间调度配置文件出错(不符合XML)会导致所有Job 无法执行:

2:同一台服务器有多个Quartz 服务,记得更改 quartz.config配置下的quartz.scheduler.exporter.port配置,否则第二个服务作业一个也不会执行。

3:每个Job下引用的dll 记得和主任务版本相同,否则无法执行。

4:代码里写了Job,quartz_jobs.xml没有配置该Job,不会影响其他Job运行;如果quartz_jobs.xml配置了某个Job 但是代码里面没有,会导致所有Job无法运行。

 升级操作:

这样会遇到一个问题,每次更改某一个Job 发版会重启服务,势必会影响到其他Job的正常运行,Job越多越明显。这里提供一种方式:作业计划采用动态加载的方式,实际执行方法采用反射加载到内存,每次执行都是重新获取执行方法加载到内存。使触发和实际执行动作分离达到互不干扰的目的。

课后小作业:

我想9:30~22:00 每10分钟执行一次 trigger 应该怎么写?

1)Cron表达式的格式:秒 分 时 日 月 周 年(可选)

字段名            允许的值             允许的特殊字符

秒                0-59                 , - * /

分                0-59                 , - * /

小时              0-23                 , - * /

日                1-31                 , - * ? / L W C

月                1-12 or JAN-DEC      , - * /

周几              1-7 or SUN-SAT       , - * ? / L C #

年(可选字段)      empty,1970-2099      , - * /

2)特殊字符描述:

"?"字符:表示不确定的值

","字符:指定数个值

"-"字符:指定一个值的范围

"/"字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m

"L"字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X

"W"字符:指定离给定日期最近的工作日(周一到周五)

"#"字符:表示该月第几个周X。6#3表示该月第3个周五

3)Cron表达式范例:

每隔5秒执行一次:*/5 * * * * ?

每隔1分钟执行一次:0 */1 * * * ?

每天23点执行一次:0 0 23 * * ?

每天凌晨1点执行一次:0 0 1 * * ?

每月1号凌晨1点执行一次:0 0 1 1 * ?

每月最后一天23点执行一次:0 0 23 L * ?

每周星期天凌晨1点执行一次:0 0 1 ? * L

在26分、29分、33分执行一次:0 26,29,33 * * * ?

每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?-->

Quartz使用及注意事项的更多相关文章

  1. quartz实例以及主要事项(注解)

    实现任务类: package com.vnetoo.nec.base.quartz; import org.springframework.context.annotation.Lazy;import ...

  2. Spring对Quartz的封装实现简单需注意事项

    前段时间在项目中一直使用正常的Quartz突然出现了任务漏跑的情况,由于我以前看过Quartz的内部实现,凭借记忆我觉得是由于Quartz的线程池的使用出现问题导致了故障的发生.为了搞清问题的真相,我 ...

  3. 【Quartz】问题记录注意事项【四】

    记录一:queartz 在同时启动多个任务是,触发器名称不能设置一致,不然第二次启动会不成功 记录二:quartz 在使用任务与触发器分离写法时,任务必须要带(.StoreDurably()) IJo ...

  4. 使用Spring整合Quartz轻松完成定时任务

    一.背景 上次我们介绍了如何使用Spring Task进行完成定时任务的编写,这次我们使用Spring整合Quartz的方式来再一次实现定时任务的开发,以下奉上开发步骤及注意事项等. 二.开发环境及必 ...

  5. Quartz集群原理及配置应用

    1.Quartz任务调度的基本实现原理 Quartz是OpenSymphony开源组织在任务调度领域的一个开源项目,完全基于Java实现.作为一个优秀的开源调度框架,Quartz具有以下特点: (1) ...

  6. Spring整合Quartz

    目录[-] 一.Spring创建JobDetail的两种方式 二.整合方式一示例步骤 1.将spring核心jar包.quartz.jar和Spring-context-support.jar导入类路 ...

  7. iOS基础 - Quartz 2D绘图

    一.Quartz 2D Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境. Quartz 2D以PDF的规范为基础的图形库,用来绘制二维文字和图形,允许相同的绘图指令在任 ...

  8. Spring4整合quartz2.2.3,quartz动态任务

    Spring4整合quartz2.2.3,quartz动态任务 >>>>>>>>>>>>>>>>> ...

  9. 【框架学习与探究之定时器--Quartz.Net 】

    声明 本文欢迎转载,原文地址:http://www.cnblogs.com/DjlNet/p/7572174.html 前言 这里相信大部分玩家之前现在都应该有过使用定时器的时候或者需求,例如什么定时 ...

随机推荐

  1. kali linux之edb--CrossFire缓冲区溢出

    漏洞的罪恶根源------变量,数据与代码边界不清,开发人员对用户输入没做过滤,或者过滤不严 如这个脚本,写什么,显示什么,但是加上:,|,&&,后面加上系统命令,就执行命令了 缓冲区 ...

  2. 【bzoj3456】城市规划 dp+多项式求逆

    Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接或 ...

  3. 洛谷P2770 航空路线问题(费用流)

    传送门 完了这题好厉害……字符串什么的好麻烦…… 要求从$1$到$n$的路径,不重复,经过边数最多 每一个点拆成两个,$A_i,B_i$,然后$A_i$到$B_i$连容量为$1$,费用为$1$的边,保 ...

  4. ubuntu 上安装支付宝安全插件不能运行问题

    1.在ubuntu的firefox浏览器中打开支付宝首页,不能登录,按照提示下载插件 aliedit.tar.gz 2.解压到某个文件夹下,有文件aliedit.sh, 运行 # sh aliedit ...

  5. Python中lambda表达式

    一.lambda表达式形式 lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式.冒号前是参数,冒号后是返回值. lambda是一个表达式而不是一个语句. lambda表达式可以出现在Py ...

  6. Hibernate学习笔记(三)—— Hibernate的事务控制

    Hibernate是对JDBC的轻量级封装,其主要功能是操作数据库.在操作数据库过程中,经常会遇到事务处理的问题,接下来就来介绍Hibernate中的事务管理. 在学习Hibernate中的事务处理之 ...

  7. BZOJ - 1941 最远估价

    题意:求给出的所有点的最远点减最近点的最小差值 KD树的最远估价和最近估价略微不同,直接找最远垂线,反正xjb改一下就过了 #include<bits/stdc++.h> #define ...

  8. Codeforces - 662A 思路巧妙的异或

    题意:给你\(n\)堆石子玩尼姆博弈,每堆石子可以是\(a_i\)也可以是\(b_i\),选择概率相等且每堆选择相互独立,求先手必胜(异或不为0)的概率 首先需要找出一种优雅的策略表示方法(利用异或的 ...

  9. 【mysql】count(*),count(1)与count(column)区别

    https://blog.csdn.net/lzm18064126848/article/details/50491956 count(*)对行的数目进行计算,包含NULL count(column) ...

  10. google chrome 高版本 解除禁止添加本地扩展

    1.下载chrome.adb文件,找不到的可以到https://pan.baidu.com/s/1j67vz_b6CwKfCH_uZzSfgA  这里下载2.Win+R 输入 gpedit.msc 3 ...