Spring.NET教程(二十)——整合Quartz.NET(应用篇)

Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于WinForm和ASP.NET应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。

你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果发生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用.NET编程吗?如果这些问题中任何一个你回答是,那么你应该使用Quartz.NET调度器。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。

  Quartz.NET使用Trigger,Job和JobDetail对象的组合来实现工作调度,可以参考博客:http://www.cnblogs.com/shanyou/archive/2007/08/25/QuartzNETtutorial.html 

  Spring.NET现在已经支持了Quartz.NET,在以后的开发中我们仅需要配置一下属性就能轻松使用Quartz.NET。

  Spring.NET提供了QuartzJobObject基类,该类继承IJob接口。实现一个Job我们可以继承该类。或者配置Spring.NET提供的MethodInvokingJobDetailFactoryObject对象。而实现JobDetail则使用Spring.NET提供的JobDetailObject类。另外Spring.NET为我们提供了两种Trigger:Spring.Scheduling.Quartz.SimpleTriggerObject和Spring.Scheduling.Quartz.CronTriggerObject。

  以下是两种Trigger的例子:

  DiningService

    public class DiningService : QuartzJobObject
    {
        public string UserName { get; set; }
        protected override void ExecuteInternal(JobExecutionContext context)
        {
            string msg = string.Format("{0}: 回家吃饭时间, 姓名: {1}, 下次吃饭时间 {2}",
                DateTime.Now, UserName,
                context.NextFireTimeUtc.Value.ToLocalTime());
            Console.WriteLine(msg);
        }
    }

 

DiningService

      <object name="DiningService" type="Spring.Scheduling.Quartz.JobDetailObject, Spring.Scheduling.Quartz">
        <property name="JobType" value="QuartzNet.DiningService, QuartzNet" />
        <!-- 注入被调度的对象 -->
        <property name="JobDataAsMap">
          <dictionary>
            <entry key="UserName" value="冬冬" />
          </dictionary>
        </property>
      </object>
      <object id="cronTrigger" type="Spring.Scheduling.Quartz.CronTriggerObject, Spring.Scheduling.Quartz">
        <property name="jobDetail" ref="DiningService" />
        <!-- 每个5秒执行一次 -->
        <property name="cronExpressionString" value="0/5 * * * * ?" />
      </object>

  PersonService

    public class PersonService
    {
        public string UserName { get; set; }
        public void GoToBed()
        {
            Console.WriteLine("姓名 {0} 睡觉的时间是: {1}", UserName, DateTime.Now);
        }
    }

  PersonService

      <!--注入的目标对象-->
      <object id="PersonService" type="QuartzNet.PersonService, QuartzNet">
        <property name="UserName" value="刘冬" />
      </object>
      <object id="jobDetail" type="Spring.Scheduling.Quartz.MethodInvokingJobDetailFactoryObject, Spring.Scheduling.Quartz">
        <!-- 不必继承IJob接口 -->
        <property name="TargetObject" ref="PersonService" />
        <property name="TargetMethod" value="GoToBed" />
      </object>
      <object id="jobDetailNonConcurrent" type="Spring.Scheduling.Quartz.MethodInvokingJobDetailFactoryObject, Spring.Scheduling.Quartz">
        <property name="targetObject" ref="PersonService" />
        <property name="targetMethod" value="GoToBed" />
        <!-- 并发等待 -->
        <property name="concurrent" value="false" />
      </object>
      <object id="simpleTrigger" type="Spring.Scheduling.Quartz.SimpleTriggerObject, Spring.Scheduling.Quartz">
        <property name="jobDetail" ref="jobDetail" />
        <!-- 从几秒开始 -->
        <property name="startDelay" value="0s" />
        <!-- 每隔5秒重复 -->
        <property name="repeatInterval" value="15s" />
      </object>

 

  triggers

      <object type="Spring.Scheduling.Quartz.SchedulerFactoryObject, Spring.Scheduling.Quartz">
        <!--触发器-->
        <property name="triggers">
          <list>
            <ref object="simpleTrigger" />
            <ref object="cronTrigger" />
          </list>
        </property>
      </object>

  运行效果:

Spring.NET教程(二十二)——整合Quartz.NET(应用篇) Level 200

转载于:https://www.cnblogs.com/millen/archive/2009/12/30/1635993.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jsp与jspx文件

jspx文件 jspx&#xff1a;以xml语法来书写jsp的文件&#xff0c;自定义的映射类型, jspx jsp XML A JSP document is a JSP page written in XML syntax as opposed to the standard syntax described.Because it is written in XML syntax, a JSP document is also…

C++实现链表逆序打印、链表反转

//题目&#xff1a;C实现链表逆序打印、链表反转 // 如何将链表逆序&#xff0c;取决于题目的要求。如果面试官只要求打印&#xff0c;一般不改动链表结构为好&#xff0c;如果要求改变链表的方向&#xff0c;则需要改变结构&#xff0c;再顺序打印。 // 方法1&#xff1a;只逆…

vector深拷贝与浅拷贝使用总结

(1)、拷贝构造/赋值函数 --- 深拷贝 int w 100;int h 20;vector<int> dataA(w*h ,0Xff);vector<int> dataB dataA; // copy 构造int * ptr0 &dataA[0];int * ptr1 &dataB[0];printf("%u\n", ptr0);printf("%u\n", ptr1); 结果&…

JavaScript 对象和包装类

对象的创建方法 {}var obj {} 系统自带的构造函数var obj new Object()//Array()//Number() 自定义的构造函数function Person(){} var person1 new Person() 注&#xff1a;构造函数&#xff1a;大驼峰命名规则 TheFirstName 普通函数&#xff1a;小驼峰命名规则 the…

dll动态链接库

Visual C#生成DLL文件——预备知识 DLL&#xff08;Dynamic Link Library&#xff09;文件即动态链接库文件&#xff0c;是一种可执行文件&#xff0c;允许程序共享执行特殊任务所必需的代码和其他资源。多数情况下带有dll扩展名&#xff08;也可以 是.ocx文件&#xff1a;Acti…

C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号

C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号

ELF文件格式

ELF文件格式 ELF文件&#xff08;Executable Linkable Format&#xff09;是一种文件存储格式。Linux下的目标文件和可执行文件都按照该格式进行存储&#xff0c;有必要做个总结。 概要 本文主要记录总结32位的Intel x86平台下的ELF文件结构。ELF文件以Section的形式进行存储…

TCP协议的三次握手与四次挥手

tcp协议的三次握手和四次挥手 三次握手&#xff1a; 第一次握手&#xff1a; 客户端发起一个链接&#xff08;SYN&#xff09; 第二次握手&#xff1a; 服务端就会返回一条&#xff08;ACK&#xff09;确认信息&#xff0c;同时服务端也会向客户端发起一个链接请求&#xff08;…

晚上美容护肤10要诀 - 健康程序员,至尚生活!

夜晚美容护肤十要诀  如何护肤&#xff0c;我想谁也知道晚上是给予皮肤滋养的最佳时期&#xff0c;别以为早晚搽日霜、晚霜就能够令你的皮肤变得白雪雪、滑嘟嘟&#xff0c;其实这只是表面的滋润。要彻底护理&#xff0c;就要依赖你睡前的准备功夫&#xff0c;才能使肌肤得到…

明白了为什么java方法上面为什么要加个@符号

原来是java的特性“注解&#xff08;Annotation&#xff09;” 注解&#xff08;Annotation&#xff09; 为我们在代码中天界信息提供了一种形式化的方法&#xff0c;是我们可以在稍后某个时刻方便地使用这些数据&#xff08;通过 解析注解 来使用这些数据&#xff09; 注解的语…

PG内核分析 QA

今天查找postgreSQL相关的资料时&#xff0c;查找到该文章&#xff0c;觉得写得比较好 https://www.cnblogs.com/liuhaifeng/p/12184902.html

STM32的PA15、PB3、 PB4管脚作普通管脚的解决办法

最近做了一个板子&#xff0c;使用的是SWD方式进行下载程序&#xff0c;仅仅使用到SWDIO&#xff08;PA13&#xff09; 和SWCLK&#xff08;PA14&#xff09;两个管脚。我将PA15&#xff08;JTDI&#xff09;和PB3&#xff08;JTDO&#xff09;管脚用于他用&#xff08;用于点L…

Google不要走

这两天Google离开中国的新闻不断&#xff0c;如果他真的要离开&#xff0c;我会觉得非常遗憾。我想他已经是大部分程序员的精神领袖&#xff0c;技术牛人的代表&#xff0c;现在居然会被逼走&#xff1f;&#xff1f; 与百度的搜索相比&#xff0c;Google也有广告&#xff0c;但…

AIX errdemon 命令

errdemon 进程持续检查 /dev/error 文件,收集error信息。 命令格式&#xff1a; Usage: errdemon -i filename -s value -B value [ -d | -D -m maxdups -t time ] | -l -i filename Uses the error log file specified by the filename parameter. If this f…

C#集合。

集合命名空间&#xff1a; using system.collections. 非泛型集合 using system.collections.Generic. 泛型集合 为什么要用集合&#xff1a; 1、数组一旦声明长度就固定了。 2、集合有很多方法可以用 等 常用集合&#xff1a; 类似数组集合&#xff1a;ArrayList List<&g…

对std::listT的封装

由于工作的原因&#xff0c;需要在线程安全的情况下对std::list<T>进行该list进行访问&#xff0c;因此就简单的封装了下&#xff0c;代码如下&#xff1a; template<typename T> class List { public:List () {}~List () {}void PushBack(const T& value) {b…

code

// 控制字体系列。"editor.fontFamily": "Droid Sans Mono, monospace, monospace, Droid Sans Fallback",// 覆盖当前所选颜色主题中的编辑器颜色和字体样式。"editor.tokenColorCustomizations": {},// 控制差异编辑器是否将对前导空格或尾随空…

SWISHMAX2脚本整理及Swishmax使用技巧

wish Max让你更快速更简单地在你的网页中加入Flash动画,超过230种可选择的预设效果.SWiSH是一个快速、简单且经济的方案,让你可以在你的网页 中加入Flash动画.只要点几下鼠标,你就可以加入让你的网页在众多网站中令人注目的酷炫动画效果.你可以创造形状、文字、按钮以及移动路径…

MAC机路由管理

On the Mac the command is similar, but a bit different Just as a note to myself and anyone else interested:add network:1sudo route add -net 10.67.0.0/16 192.168.120.254Add hostsudo route add -host 10.67.0.0/16 192.168.120.254转载于:https://blog.51cto.com…

Redis的持久化机制

Redis 的数据全部在内存里&#xff0c;如果突然宕机&#xff0c;数据就会全部丢失&#xff0c;因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失&#xff0c;这种机制就是 Redis 的持久化机制。 Redis 的持久化机制有两种&#xff0c;第一种是RDB快照&#xff0c;第二…