系列目录

前言

上一节我们学习了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"] = "",
["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
org.quartz.scheduler.dbFailureRetryInterval 否 Long
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. 开始,你能够定制如何自动生成实例 ID。见 instanceIDGenerator.class 属性,会在接下来讲到。
·org.quartz.scheduler.instanceIdGenerator.class
从版本 1.5. 开始,这个属性允许你定制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 的属性。

ASP.NET MVC5+EF6+EasyUI 后台管理系统(85)-Quartz 作业调度用法详解二的更多相关文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理   http://ww ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

    系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试

    1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+Easy ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级

    系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+E ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构

    系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析

    系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(54)-工作流设计-所有流程监控

    系列目录 先补充一个平面化登陆页面代码,自己更换喜欢的颜色背景 @using Apps.Common; @{ Layout = null; } <!DOCTYPE html> <ht ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox

    系列目录 https://yunpan.cn/cZVeSJ33XSHKZ  访问密码 0fc2 今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了.而目前easyui 1 ...

  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航

    系列目录 本节主要知识点是easyui 的手风琴加树结构做菜单导航 有园友抱怨原来菜单非常难看,但是基于原有树形无限级别的设计,没有办法只能已树形展示 先来看原来的效果 改变后的效果,当然我已经做好了 ...

随机推荐

  1. smarty中的修饰函数

    smarty中的修饰函数: 对在模板文件中显示的数据变量进行二次修饰. 格式: {ts:变量|函数名:参数1:参数2:参数3...|函数名:参数1:参数2...} 常见的修饰函数: capitaliz ...

  2. 网页web前端学习技巧

    1. 写js效果时一定要注意先分析好效果的行为,尽量用最简单通用性的代码.分析步骤可以是1.先把要实现的功能一步一步的写在纸上(即自然语言)2.再根据自然语言翻译成机器语言,用jquery写的代码一定 ...

  3. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  4. .NET 通过 Autofac 和 DynamicProxy 实现AOP

    什么是AOP?引用百度百科:AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.实现AOP主要由两 ...

  5. php中for循环的应用

    for 循环是 PHP 中最复杂的循环结构.它的行为和 C 语言的相似.在PHP中使用的是执行相同的代码集的次数. for 循环的语法是: for (expr1; expr2; expr3)state ...

  6. Day1-模块初识

    模块,也叫库,分为标准库和第三方库.标准库,直接导入使用,比如import getpass:第三方库,需下载安装才能使用,比如paramiko: 一.sys模块 import sys print(sy ...

  7. net.sf.json.JSONException: java.lang.reflect.InvocationTargetException Caused by: java.lang.IllegalArgumentException at java.sql.Date.getHours(Unknown Source)

    数据库字段类型为Date,转成JSON格式会有问题,解决方案如下: json-lib有一个配置类JsonConfig通过JsonConfig可以注册一个字段处理器实现JsonValueProcesso ...

  8. 探讨SQL Server并发处理存在就更新七种解决方案

    前言 本节我们来讲讲并发中最常见的情况存在即更新,在并发中若未存在行记录则插入,此时未处理好极容易出现插入重复键情况,本文我们来介绍对并发中存在就更新行记录的七种方案并且我们来综合分析最合适的解决方案 ...

  9. 【WPF】如何获取命令行参数

    应用程序以 Main 方法为入口点,如果为 Main 方法指定一个 string[] 类型的参数,在程序运行时,这个参数会获取到传递给应用程序的命令行参数. 而 WPF 应用程序比较特殊,因为在VS中 ...

  10. JavaSE教程-01初识Java

    1.计算机的概念 软件+硬件 2.操作系统 Windows.Mac.Linux.Unix等 3.计算机编程语言 计算机语言是一种人与计算机沟通的媒介. 分类: 机器语言:都是基于二进制的方式,由0和1 ...