zoukankan      html  css  js  c++  java
  • Quartz使用及注意事项

    Quartz使用及注意事项

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

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

    1Quartz 简介
    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 * * ?-->

  • 相关阅读:
    JS原始类型Number数字类型
    JS数据类型基础知识
    JS基础循环语句和跳转语句
    JS对象类型数组方法篇
    JS对象类型数组基础篇
    JS基础逻辑运算符
    IE6,IE7,FF等浏览器不兼容原因及解决办法(转)
    DML、DDL、DCL区别
    Asp.net(c#)GridView分页时用图片显示上一页,下一页
    P3P完成跨域COOKIE
  • 原文地址:https://www.cnblogs.com/aresyl/p/5206108.html
Copyright © 2011-2022 走看看