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,一经查实,立即删除!

相关文章

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); 结果&…

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;…

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;但…

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;第二…

今天用python的turtle简单画了一副眼镜

画的不太好看&#xff0c;下次要继续努力鸭!!! 这个是代码~ 1 from turtle import*2 pencolor("blue")3 fillcolor("white")4 setup(500,1000,100,10)5 speed(2)6 pensize(4)7 begin_fill()8 circle(40,450)9 goto(70,40) 10 circle(-40,360) 11 penup() 1…

ADHD-注意力缺陷多动症

【以下内容转自Wiki】 ADHD&#xff1a;Attention deficit-hyperactivity disorder ADHD的主要病征是&#xff1a; 注意力散涣&#xff08;inattentive&#xff09;或 集中困难&#xff08;Attention-deficit&#xff09;活动量过多&#xff08;hyperactive或hyperkinetic&…

2019春季第三次编程总结

7-1 判断上三角矩阵 &#xff08;15 分) 上三角矩阵指主对角线以下的元素都为0的矩阵&#xff1b;主对角线为从矩阵的左上角至右下角的连线。 本题要求编写程序&#xff0c;判断一个给定的方阵是否上三角矩阵。 输入格式&#xff1a; 输入第一行给出一个正整数T&#xff0c;为待…

ZerMQ安装与使用

windows下 使用vs2010的&#xff0c;v4.0.4的版本官方 0mq api 好像还没加上去&#xff0c;我是参照老版本&#xff08;v3.1)的用法来的。 使用前你要对windows下动态库的使用有个基本了解。我的上一篇博客有讲&#xff0c;但有点乱&#xff0c;有时间再改一改。 这里我是用了…

远程客户端连接MysqL数据库太慢解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 局域网客户端访问mysql 连接慢问题解决。 cd /etc/mysql vi my.conf [mysqld] skip-name-resolve 此选项禁用了DNS解析&#xff0c;连接速度会快很多。不过&#xff0c;这样的话就不能在MySQL的授权表中使用主机名了…

学号 20175212 《Java程序设计》第3周学习总结

学号 20175212 《Java程序设计》第3周学习总结 教材学习内容总结 一、 Java——面向对象语言 核心内容为对象&#xff0c;一切围绕着对象。以下为三个重要性质&#xff1a; 封装性&#xff1a;将数据和对数据的操作封装在一起。继承&#xff1a;子类可以继承父系的属性和行为。…

Cocos2d开发1:Xcode与TexturePacker的集成

2019独角兽企业重金招聘Python工程师标准>>> 一、导读 这是一篇关于xcode与TexturePacker集成的文章&#xff0c;主要说明cocos2d-iphone/cocos2d-x游戏开发时如何进行图片资源的自动化管理。在进行游戏开发时&#xff0c;我们为了提升性能及减少游戏安装包的大小&…

Boost智能指针——boost::scoped_ptr(使用及原理分析)

简介 boost::scoped_ptr是一个比较简单的智能指针&#xff0c;它能保证在离开作用域之后它所管理对象能被自动释放。下面这个例子将介绍它的使用&#xff1a; 1 #include <iostream>2 #include <boost/scoped_ptr.hpp>3 4 using namespace std;5 6 class Book7 {8 …

c# 读取记事本txt文档到DataTable中

有时候我们仅仅需要用到简单的几个数据,没有必要在数据库中建立单独的表去存储这些数据然后去连接数据库等等。 例如&#xff1a;我们的程序中只需要给几个人定时发送邮件&#xff0c;而这几个人的邮件地址则可以放到txt文档中,然后读取出来即可。 从txt读取出来的数据&#xf…

魔兽争霸3地图(WarIII Maps):梦若流星

魔兽争霸3地图&#xff08;WarIII Maps&#xff09;&#xff1a;梦若流星梦若流星游戏类型&#xff1a;RPG通关时间&#xff1a;30分钟流星蝴蝶剑后传&#xff0c;即使孟星魂想独善其身&#xff0c;也未必就能如愿………………为了更好的体验游戏&#xff0c;请在在“选项—声音…

flash特效原理:图片滑动放大效果(2)

flash特效原理&#xff1a;图片滑动放大效果(1) http://blog.csdn.net/hero82748274/archive/2009/10/22/4715312.aspx 最近看了一些关于动态注册点更加的办法&#xff0c;顺手牵羊把他下载了&#xff0c;感觉挺好用。再把一个倒影类给下载了&#xff0c;结合上次一个做法&…

Windows Phone 7实现图片数据绑定

Windows Phone 7实现图片数据绑定 首先我们使用ListBox来显示多张图片&#xff0c;然后在建立一个单独的页面来显示单独的一张图片。 1.我们建立一个Picture.xaml的页面&#xff0c;并使用ListBox控件来显示多张图片的信息。&#xff0c;示例代码如下&#xff1a; <Grid x:N…

类前置声明的使用

今天在写代码时&#xff0c;遇到了是否需要加头文件的问题&#xff0c;看到这个博客之后收益匪浅&#xff0c;因此转载该篇文章。 转载&#xff1a;https://www.jianshu.com/p/9768175387b6 首先我们看这样一个示例程序: 以上代码中,类CY中有个CX类型的数据成员,我们需要在CY…