专栏首页ASP.NET MVC5 后台权限管理系统ASP.NET MVC5+EF6+EasyUI 后台管理系统(85)-Quartz 作业调度用法详解二

ASP.NET MVC5+EF6+EasyUI 后台管理系统(85)-Quartz 作业调度用法详解二

前言

上一节我们学习了Quartz的基本用法 这一节学习通过XML配置的形式来执行任务 这一节主要认识一些属性,为下一步打基础 代码下载:链接:http://pan.baidu.com/s/1ge6jFDD 密码:gaii

 我们在安装了Quartz后,会在目录下生成job_scheduling_data_2_0.xsd文件,此文件是XML配置智能提示用,如图所示:有利于我们编写XML

 实现

虽然有了智能提示,但是我们实际的配置也是照着模板来套入而已,下面来看一个XML

<?xml version="1.0" encoding="UTF-8"?>

<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 version="2.0">
  <processing-directives>
    <overwrite-existing-data>true</overwrite-existing-data>
  </processing-directives>
  <schedule>
    <job>
      <name>jobName1</name>
      <group>jobGroup1</group>
      <description>jobDesciption1</description>
      <job-type>QuartzTest.HelloJob, QuartzTest</job-type>
      <durable>true</durable>
      <recover>false</recover>
      <job-data-map> <!--参数-->
        <entry>
          <key>key0</key>
          <value>value0</value>
        </entry>
        <entry>
          <key>key1</key>
          <value>value1</value>
        </entry>
        <entry>
          <key>key2</key>
          <value>value2</value>
        </entry>
      </job-data-map>
    </job>
    
    <trigger>
      <simple>
        <name>simpleName</name>
        <group>simpleGroup</group>
        <description>SimpleTriggerDescription</description>
        <job-name>jobName1</job-name>
        <job-group>jobGroup1</job-group>
        <start-time>2017-1-1 00:00:01</start-time>
        <end-time>2020-05-04 00:00:00</end-time>
        <misfire-instruction>SmartPolicy</misfire-instruction>
        <repeat-count>100</repeat-count>                  <!--执行100次-->
        <repeat-interval>1000</repeat-interval>           <!--间隔1秒一次-->
      </simple>
    </trigger>
  </schedule>
</job-scheduling-data>

解读一下这个XML表达的意思:

  1. 在类库QuartzTest下的命名空间QuartzTest下的类HelloJob是要执行的C#类方法,同样继承IJob
  2. 开始日期:2017-1-1 结束日期2020-5-4
  3. 执行100次
  4. 每一秒执行一次

也是很容易就看得懂!

同样的您也可以把Cron表达式配置在Trigger节点

<trigger>
      <cron>
        <name>JobTrigger</name>
        <group>JobTriggerGroup</group>
        <job-name>ResourcesJob</job-name>
        <job-group>ResourcesGroup</job-group>
        <cron-expression>0 */1 * * * ?</cron-expression>
      </cron>
    </trigger>

调用方式:

同样的在Main入口

            var properties = new NameValueCollection
            {
                ["quartz.scheduler.instanceName"] = "XmlConfiguredInstance",
                ["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz",
                ["quartz.threadPool.threadCount"] = "5",
                ["quartz.plugin.xml.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz",
                ["quartz.plugin.xml.fileNames"] = "~/quartz_jobs.xml"
            };


            ISchedulerFactory sf = new StdSchedulerFactory(properties);
            IScheduler sched = sf.GetScheduler();
            // we need to add calendars manually, lets create a silly sample calendar
            var dailyCalendar = new DailyCalendar("00:01", "23:59");
            dailyCalendar.InvertTimeRange = true;
            sched.AddCalendar("cal1", dailyCalendar, false, false);

            sched.Start();

NameValueCollection 属性比较固定一般不需要更改,只需要指定XML的路径即可

附录

属性的解析,有兴趣的了解一下,不清楚也没有关系,基本配置都是通用的,除非特别情况,我们再回过头来研究

名称                             必须    类型      默认值   
 
org.quartz.scheduler.instanceName                  否    String    'QuartzScheduler'    
org.quartz.scheduler.instanceId                    否    String    'NON_CLUSTERED'    
org.quartz.scheduler.instanceIdGenerator.class     否    String    org.quartz.simpl.SimpleInstanceIdGenerator    
org.quartz.scheduler.threadName                    否    String    instanceName+'_QuartzSchedulerThread'    
org.quartz.scheduler.idleWaitTime                  否    Long      30000    
org.quartz.scheduler.dbFailureRetryInterval        否    Long      15000    
org.quartz.scheduler.classLoadHelper.class         否    String    org.quaartz.simpl.CascadingClassLoadHelper    
org.quartz.context.key.SOME_KEY                    否    String    None    
org.quartz.scheduler.jobFactory.class              否    String    org.quartz.simple.SimpleJobFactory

·org.quartz.scheduler.instanceName 
每个 Scheduler 必须给定一个名称来标识。当在同一个程序中有多个实例时,这个名称作为客户代码识别是哪个 Scheduler 而用。假如你用到了集群特性,你就必须为集群中的每一个实例使用相同的名称,以使它们成为“逻辑上” 是同一个 Scheduler 。

·org.quartz.scheduler.instanceId
每个 Quartz Scheduler 必须指定一个唯一的 ID。这个值可以是任何字符串值,只要对于所有的 Scheduler 是唯一的。如果你想要自动生成的 ID,那你可以使用 AUTO 作为 instanceId 。从版本 1.5.1 开始,你能够定制如何自动生成实例 ID。见 instanceIDGenerator.class 属性,会在接下来讲到。

·org.quartz.scheduler.instanceIdGenerator.class 
从版本 1.5.1 开始,这个属性允许你定制instanceId 的生成,这个属性仅被用于属性 org.quartz.scheduler.instanceId 设置为 AUTO 的情况下。默认是 org.quartz.simpl.SimpleInstanceIdGenerator ,它会基于主机名和时间戳来产生实例 ID 的。

·org.quartz.scheduler.threadName
可以是对于 Java 线程来说有效名称的任何字符串。假如这个属性未予指定,线程将会接受 Scheduler 名称 (org.quartz.scheduler.instanceName ) 前附加上字符串 '_QuartzSchedulerThread' 作为名称。

·org.quartz.scheduler.idelWaitTime 
这个属性设置了当 Scheduler 处于空闲时转而再次查询可用 Trigger 时所等待的毫秒数。通常,你无需调整这个参数,除非你正使用 XA 事物,遇到了 Trigger 本该立即触发而发生延迟的问题。

·org.quartz.scheduler.dbFailureRetryInterval 
这个属性设置 Scheduler 在检测到 JobStore 到某处的连接(比如到数据库的连接) 断开后,再次尝试连接所等待的毫秒数。这个参数在使用 RamJobStore 无效。

·org.quartz.scheduler.classLoadHelper.class 
对于多数健状的应用,所使用的默认值为 org.quartz.simpl.CascadingClassLoadHelper 类,它会依序使用其他的 ClassLoadHelper 类,直到有一个能正常工作为止。你大概没必须为这个属性指定任何其他的类,除非有可能在应用服务器中时。当前所有可能的 ClassLoadHelper 实现可在 org.quartz.simpl 包中找到。

·org.quartz.context.key.SOME_KEY 
这个属性用于向 "Scheduler 上下文" 中置入一个 名-值 对表示的字符串值。(见 Scheduler.getContext() )。因此,比如设置了 org.quartz.context.key.MyEmail = myemail@somehost.com 就相当于执行了 scheduler.getContext().put("MyEmail", myemail@somehost.com ) 

·org.quartz.scheduler.userTransactionURL 
它设置了 Quartz 能在哪里定位到应用服务器的 UserTransaction 管理器的 JNDI URL。默认值(未设定的话) 是 java:comp/UserTransaction ,这几乎能工作于所有的应用服务器中。Websphere 用户也许需要设置这个属性为 jta/usertransaction 。这个属性仅用于 Quartz 配置使用 JobStoreCMT 的情况,并且 org.quartz.scheduler.wrapJobExecutionInUserTransaction 被设定成了 true 。

·org.quartz.scheduler.wrapJobExecutionInUserTransaction 
如果你要 Quartz 在调用你的 Job 的 execute 之前启动一个 UserTransaction 的话,设置这个属性为 true 。这个事物将在 Job 的 execute 方法完成和 JobDataMap (假如是一个 StatefulJob ) 更新后提交。默认值为 false 。

·org.quartz.scheduler.jobFactory.class
这是所用的 JobFactory 的类名称。默认为 org.quartz.simpl.SimpleJobFactory 。你也可以试试 org.quartz.simpl.PropertySettingJobFactory 。一个 Job 工厂负责产生 Job 类的实例。SimpleFactory 类是调用 Job 类的 newInstance() 方法。PropertySettingJobFactory 也会调用 newInstance() ,但还会使用 JobDataMap 中的内容以反射方式设置 Job Bean 的属性。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ASP.NET MVC5+EF6+EasyUI 后台管理系统(85)-Quartz 作业调度用法详解二

    前言 上一节我们学习了Quartz的基本用法 这一节学习通过XML配置的形式来执行任务 这一节主要认识一些属性,为下一步打基础 代码下载:链接:htt...

    用户1149182
  • ASP.NET MVC5+EF6+EasyUI 后台管理系统(4)-创建项目解决方案

    前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 设计中术语,概念这种东西过于模糊,我们必须学习累积才能认识这些概念模型。 我无法用文章...

    用户1149182
  • .Net 转战 Android 4.4 日常笔记(3)--目录结构分析

    看了创建项目后,出现的文件夹很多确实有点晕,不过经过简单的了解还是跟我们asp.net的目录有点相识滴。 ? 下面这张图,概括了主要的文件用途。其实也只需要了解...

    用户1149182
  • ASP.NET MVC5+EF6+EasyUI 后台管理系统(85)-Quartz 作业调度用法详解二

    前言 上一节我们学习了Quartz的基本用法 这一节学习通过XML配置的形式来执行任务 这一节主要认识一些属性,为下一步打基础 代码下载:链接:htt...

    用户1149182
  • Spring Boot Quartz 分布式集群任务调度实

    在工程中时常会遇到一些需求,例如定时刷新一下配置、隔一段时间检查下网络状态并发送邮件等诸如此类的定时任务。 定时任务本质就是一个异步的线程,线程可以查询或修改并...

    乱敲代码
  • quartz监控日志(二)添加监听器

    上一章介绍监控job有三种方案,其实还有一个简单方案是实现quartz的TriggerListener。

    一笠风雨任生平
  • Gopher协议在SSRF漏洞中的深入研究

    定义:Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。...

    用户7021283
  • 无人驾驶首例致死事件:Uber再出事故,无人驾驶进程或受阻

    【导读】2018年3月18日深夜,Uber 自动驾驶汽车在亚利桑那州坦佩市撞死了一名横穿马路的妇女伊莱-恩赫茨伯格,这是全球首例无人驾驶导致行人死亡的事故,目前...

    WZEARW
  • Quartz.net通过配置文件来完成作业调度

    将Quartz.NET集成到 Castle中 例子代码使用的Quartz.net版本是0.6,Quartz.NET 0.9 发布了 ,最新版本支持通过配置文件来...

    张善友
  • typecho百度主动推送插件,利于SEO

    插件设计代码:<?php /** * <strong style="color:red;...

    Inkedus

扫码关注云+社区

领取腾讯云代金券