Quartz.NET开源作业调度框架系列(四):Plugin Job-转
如果在Quartz.NET作业运行时我们想动态修改Job和Trigger的绑定关系,同时修改一些参数那么该怎么办呢?Quartz.NET提供了插件技术,可以通过在XML文件中对Job和Trigger的参数进行配置,然后定期去加载配置文件来实例化任务和Trigger,这样就解决了此类问题.
1 PlugInJobExample

using System;
using System.Collections.Specialized;
using System.Threading;
using Common.Logging;
using Quartz;
using Quartz.Impl;
using Quartz.Job;
using System.Windows.Forms; namespace QuartzDemo
{
public class PlugInJobExample
{
public string Name
{
get { return GetType().Name; }
} public virtual IScheduler Run()
{ var properties = new NameValueCollection();
properties["quartz.plugin.triggHistory.type"] = "Quartz.Plugin.History.LoggingJobHistoryPlugin";
properties["quartz.plugin.jobInitializer.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin";
//配置文件名称
properties["quartz.plugin.jobInitializer.fileNames"] = "quartz_jobs.xml";
properties["quartz.plugin.jobInitializer.failOnFileNotFound"] = "true";
//每隔120秒进行探查,看配置文件是否更改
properties["quartz.plugin.jobInitializer.scanInterval"] = "120"; // 用插件XML定义的propertie来实例化一个ISchedulerFactory
ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler(); //启动
sched.Start();
//返回
return sched; }
}
}

2 SimpleJob1

1 using System;
2 using System.Collections.Generic;
3
4 using Common.Logging;
5 using Quartz;
6 using Quartz.Impl;
7 using Quartz.Job;
8 using System.Windows.Forms;
9 namespace QuartzDemo
10 {
11
12 public class SimpleJob1 : IJob
13 {
14
15 public virtual void Execute(IJobExecutionContext context)
16 {
17 JobKey jobKey = context.JobDetail.Key;
18 if (isOpen("FrmConsole"))
19 {
20 try
21 {
22 //获取当前Form1实例
23 __instance = (FrmConsole)Application.OpenForms["FrmConsole"];
24 //获取当前执行的线程ID
25 __instance.SetInfo(" - "+jobKey + "Thread ID " + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());
26
27 //通过方法更新消息
28 __instance.SetInfo(string.Format(" - {0} exec at {1}",
29 jobKey,
30 System.DateTime.Now.ToString()));
31
32 }
33 catch (Exception ex)
34 {
35 Console.WriteLine(ex.Message);
36 }
37 }
38 // This job simply prints out its job name and the
39
40 if (context.MergedJobDataMap.Count > 0)
41 {
42 ICollection<string> keys = context.MergedJobDataMap.Keys;
43 foreach (string key in keys)
44 {
45 String val = context.MergedJobDataMap.GetString(key);
46 __instance.SetInfo(string.Format(" - MergedJobDataMap entry: {0} = {1}", key, val));
47
48 }
49 }
50 context.Result = "exec ok";
51 }
52
53 private static FrmConsole __instance = null;
54
55 /// <summary>
56 /// 判断窗体是否打开
57 /// </summary>
58 /// <param name="appName"></param>
59 /// <returns></returns>
60 private bool isOpen(string appName)
61 {
62 FormCollection collection = Application.OpenForms;
63 foreach (Form form in collection)
64 {
65 if (form.Name == appName)
66 {
67 return true;
68 }
69 }
70 return false;
71 }
72 }
73 }

3 xml配置文件
下面第一个是简单的Trigger配置,第二个是用CronTrigger:

1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 version="2.0">
6
7 <processing-directives>
8 <overwrite-existing-data>true</overwrite-existing-data>
9 </processing-directives>
10
11 <schedule>
12
13 <job>
14 <name>jobName1</name>
15 <group>jobGroup1</group>
16 <description>jobDesciption1</description>
17 <job-type>QuartzDemo.SimpleJob1, QuartzDemo</job-type>
18 <durable>true</durable>
19 <recover>false</recover>
20 <job-data-map>
21 <entry>
22 <key>key0</key>
23 <value>value0</value>
24 </entry>
25 <entry>
26 <key>key1</key>
27 <value>value1</value>
28 </entry>
29 <entry>
30 <key>key2</key>
31 <value>value2</value>
32 </entry>
33 </job-data-map>
34 </job>
35
36 <trigger>
37 <simple>
38 <name>simpleName</name>
39 <group>simpleGroup</group>
40 <description>SimpleTriggerDescription</description>
41 <job-name>jobName1</job-name>
42 <job-group>jobGroup1</job-group>
43 <start-time>2015-12-02T10:15:00.0Z</start-time>
44 <end-time>2020-05-04T18:13:51.0Z</end-time>
45 <misfire-instruction>SmartPolicy</misfire-instruction>
46 <repeat-count>100</repeat-count>
47 <repeat-interval>1000</repeat-interval>
48 </simple>
49 </trigger>
50
51 </schedule>
52
53 </job-scheduling-data>


1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 version="2.0">
6
7 <processing-directives>
8 <overwrite-existing-data>true</overwrite-existing-data>
9 </processing-directives>
10 <schedule>
11 <job>
12 <name>SimpleJob1</name>
13 <group>myJobGroup1</group>
14 <description>SimpleJob1</description>
15 <job-type>QuartzDemo.SimpleJob1, QuartzDemo</job-type>
16 <durable>true</durable>
17 <recover>false</recover>
18 <job-data-map>
19 <entry>
20 <key>author</key>
21 <value>jackwangcumt</value>
22 </entry>
23 <entry>
24 <key>blog</key>
25 <value>isaboy</value>
26 </entry>
27 <entry>
28 <key>jobType</key>
29 <value>XML Plugin Job</value>
30 </entry>
31 </job-data-map>
32 </job>
33 <trigger>
34 <cron>
35 <name>trigger1</name>
36 <group>myTriggerGroup</group>
37 <job-name>SimpleJob1</job-name>
38 <job-group>myJobGroup1</job-group>
39 <cron-expression>0/2 * * * * ?</cron-expression>
40 </cron>
41 </trigger>
42 </schedule>
43 </job-scheduling-data>

4 效果

(可以将下图在另一个页签打开,看无压缩GIF图片)

出处:http://www.cnblogs.com/isaboy/
声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Quartz.NET开源作业调度框架系列(四):Plugin Job-转的更多相关文章
- Quartz.NET开源作业调度框架系列(四):Plugin Job
		
如果在Quartz.NET作业运行时我们想动态修改Job和Trigger的绑定关系,同时修改一些参数那么该怎么办呢?Quartz.NET提供了插件技术,可以通过在XML文件中对Job和Trigger的 ...
 - Quartz.NET开源作业调度框架系列
		
Quartz.NET是一个被广泛使用的开源作业调度框架 , 由于是用C#语言创建,可方便的用于winform和asp.net应用程序中.Quartz.NET提供了巨大的灵活性但又兼具简单性.开发人员可 ...
 - Quartz.NET开源作业调度框架系列(三):IJobExecutionContext 参数传递
		
前面写了关于Quartz.NET开源作业调度框架的入门和Cron Trigger , 这次继续这个系列, 这次想讨论一下Quartz.NET中的Job如何通过执行上下文(Execution Conte ...
 - Quartz.NET开源作业调度框架系列(三):IJobExecutionContext 参数传递-转
		
前面写了关于Quartz.NET开源作业调度框架的入门和Cron Trigger , 这次继续这个系列, 这次想讨论一下Quartz.NET中的Job如何通过执行上下文(Execution Conte ...
 - Quartz.NET开源作业调度框架系列(一):快速入门step by step
		
Quartz.NET是一个被广泛使用的开源作业调度框架 , 由于是用C#语言创建,可方便的用于winform和asp.net应用程序中.Quartz.NET提供了巨大的灵活性但又兼具简单性.开发人员可 ...
 - Quartz.NET开源作业调度框架系列(一):快速入门step by step-转
		
Quartz.NET是一个被广泛使用的开源作业调度框架 , 由于是用C#语言创建,可方便的用于winform和asp.net应用程序中.Quartz.NET提供了巨大的灵活性但又兼具简单性.开发人员可 ...
 - Quartz.NET开源作业调度框架系列(五):AdoJobStore保存job到数据库
		
Quartz.NET 任务调度的核心元素是 scheduler, trigger 和 job,其中 trigger(用于定义调度时间的元素,即按照什么时间规则去执行任务) 和 job 是任务调度的元数 ...
 - Quartz.NET开源作业调度框架系列(二):CronTrigger
		
CronTriggers比SimpleTrigger更加的灵活和有用,对于比较复杂的任务触发规则,例如"每个星期天的晚上12:00"进行备份任务,SimpleTrigger就不能胜 ...
 - Quartz.NET开源作业调度框架系列(二):CronTrigger-转
		
CronTriggers比SimpleTrigger更加的灵活和有用,对于比较复杂的任务触发规则,例如"每个星期天的晚上12:00"进行备份任务,SimpleTrigger就不能胜 ...
 
随机推荐
- Linux 动态链接库(.so)的使用
			
1. 背景 库:就是已经编写好的,后续可以直接使用的代码. c++静态库:会合入到最终生成的程序,使得结果文件比较大.优点是不再有任何依赖. c++动态库:动态库,一个文件可以多个代码同时使用内存中只 ...
 - 如何在Vblock里配置Boot from SAN
			
啥是vBlock ============ vBlock是VCE用在包含了它的数据中心产品的组件的机架上的一个商标名. 机架中的组件都是有VCE出厂前预先组装好的, 组件的预设以及解决方案, 都是客户 ...
 - 快速书写常见的 Kotlin 代码 MD
			
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
 - 微信公众平台开发----自定义菜单、消息处理及获取OpenID(C#)
			
一.成为开发者 服务器配置 登录微信公众平台官网后,在公众平台后台管理页面 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL).Token和EncodingAESKey,如下图所示: 其中 ...
 - vue-自定义组件传值
			
项目中,我们经常会遇到自定义组件传值的问题,方法很多种,但是原理很简单,下述文档总结实际项目中使用的传值方式. 父组件传递给子组件某一值,子组件内会修改该值,然后父组件需要获取新值  在 Vue 中 ...
 - 带监督的文本分类算法FastText
			
该算法由facebook在2016年开源,典型应用场景是“带监督的文本分类问题”. 模型 模型的优化目标如下: 其中,$<x_n,y_n>$是一条训练样本,$y_n$是训练目标,$ ...
 - Docker实战之创建一个tomcat容器
			
一.Docker与虚拟机的区别 二.Docker学习步骤 2.1:安装宿主操作系统 在VMVare中安装了Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic ...
 - HTTPS证书撤销
			
如果浏览器信息被拦截,可以选择清洗掉之前的证书 关闭浏览器,在CMD中输入命令 certutil -urlcache * certutil -urlcache * delete certutil -u ...
 - 使用FractionSlider生成的视差幻灯效果原型
			
在线演示 本地下载 非常棒的jQuery插件,帮助你创建超酷的视差效果幻灯!
 - ckeditor 4.2.1_演示 ckeditor 上传&插入图片
			
本文内容 FineUI ckeditor fckeditor/ckeditor 演示 ckeditor 4.2.1 上传&插入图片 最近看了一下 FineUI_v3.3.1 控件,对里边的 c ...