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>

  运行效果:

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

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

  1. Spring Boot教程(二十):Spring Boot使用String Task定时任务

    一.JAVA常见的几种定时任务比较 Timer:jdk自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让程序按照某一个频度执行, ...

  2. druid 手动指定数据源_Spring Boot2 系列教程(二十)整合JdbcTemplate 多数据源

    多数据源配置也算是一个常见的开发需求,Spring 和 SpringBoot 中,对此都有相应的解决方案,不过一般来说,如果有多数据源的需求,我还是建议首选分布式数据库中间件 MyCat 去解决相关问 ...

  3. 动画骨骼【Visual C++】游戏开发五十二 浅墨DirectX教程二十 骨骼动画来袭(一)...

    间时紧张,先记一笔,后续优化与完善. 本系列文章由zhmxy555(毛星云)编写,载转请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/detail ...

  4. 【Visual C++】游戏开发五十二 浅墨DirectX教程二十 骨骼动画来袭(一)

    这是答应大家的讲解骨骼动画的文章的N部曲的第二篇.这篇文章里,我们对现行的三种模型动画技术进行了概述,然后对X文件构成进行了详细的剖析,最后放出了骨骼动画的第一个示例程序,载入了<诛仙>中 ...

  5. 【Visual C++】游戏开发五十二 浅墨DirectX教程二十 骨骼动画来袭(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8832812 作者:毛星云(浅墨 ...

  6. 史上最简单的Spring Security教程(十九):AccessDecisionVoter简介及自定义访问权限投票器

    为了后续对 AccessDecisionManager 的介绍,我们先来提前对 AccessDecisionVoter 做个简单的了解,然后,在捎带手自定义一个 AccessDecisionVoter ...

  7. 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/15026917 作者:毛星 ...

  8. (转)tensorflow入门教程(二十六)人脸识别(上)

    https://blog.csdn.net/rookie_wei/article/details/81676177 1.概述 查看全文 http://www.taodudu.cc/news/show- ...

  9. 群晖NAS教程(二十)、利用Docker安装zdir搭建个人云盘

    群晖NAS教程(二十).利用Docker安装zdir搭建个人云盘 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000/ 一.下载与配置zdir容器 ...

  10. 【Visual C++】游戏开发五十七 浅墨DirectX教程二十四 打造游戏GUI界面(二)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/16922703 作者:毛星 ...

最新文章

  1. Oracle11gR2 64bit+Oracle11gR2Client32bit+pl/sql 9
  2. 过滤注入代码的存储过程
  3. boost::rational用法的测试程序
  4. php表白情话,向一个人表白 抖音最火99句情话告白
  5. ios开发之使用多文件上传的简单封装最原始的
  6. 怎么利用计算机公式计算完成比例,excel表格数据计算所占比例公式的使用教程...
  7. X11/XWINDOW GUI窗口应用在任务栏上没有显示的解决办法
  8. 获取Activity当前屏幕方向。
  9. java前后端分离框架_前后端分离Java后端主流开发环境框架20200622
  10. 三角函数π/2转化_数学集训营 | NO.16 任意角的三角函数之必考点
  11. c语言二重循环的盒图怎么画,5循环结构程序设计
  12. Windbg远程调试
  13. 小葵花妈妈课堂开课了:《AsyncTask源码分析》
  14. 反编译工具的安装与使用(解决部分能反编译部分不能反编译)
  15. 数据库查询语句遇到:Unknown column 'XXXX' in 'where clause'解决方法
  16. Windows - 文件系统 学习/收集
  17. 硅谷最干货大会之一AI Frontiers 详解全球投资热区和5大应用趋势
  18. 健身装备有哪些推荐?健身运动装备品牌排行榜
  19. ssi 指令 php,SSI使用详解_PHP教程
  20. 简易爬虫--360图片爬取

热门文章

  1. python etree模块所有函数详解_Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件,封装函数...
  2. html5 自定义 datepicker,如何使用 React 构建自定义日期选择器(3)
  3. golang errors 取 错误 信息_Golang 单元测试:有哪些误区和实践?
  4. android nougat和安卓7.1,Android Nougat 7.1.2 先睹为快
  5. gradient设置上下渐变_PaintCode Mac使用教程:如何使用渐变色
  6. 超硬核!数据库学霸笔记,考试/面试随便秒杀
  7. leetcode143 重排链表
  8. linux常用解压和压缩文件的命令
  9. 深度模型压缩论文(02)- BlockSwap: Fisher-guided Block Substitution for Network Compression
  10. Linux gitpush错误,linux – GIT:无法推送(奇怪的配置问题)