`
lijuanabc
  • 浏览: 119613 次
社区版块
存档分类
最新评论

Spring.NET学习笔记25——整合Quartz.NET(应用篇) Level 200

 
阅读更多

  Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于WinForm和ASP.NET应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。
你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果发生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用.NET编程吗?如果这些问题中任何一个你回答是,那么你应该使用Quartz.NET调度器。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。
  Quartz.NET使用TriggerJobJobDetail对象的组合来实现工作调度,可以参考博客: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的例子:


publicclassDiningService:QuartzJobObject
{
publicstringUserName{get;set;}

protectedoverridevoidExecuteInternal(JobExecutionContextcontext)
{
stringmsg=string.Format("{0}:回家吃饭时间,姓名:{1},下次吃饭时间{2}",
DateTime.Now,UserName,
context.NextFireTimeUtc.Value.ToLocalTime());

Console.WriteLine(msg);
}
}


<objectname="DiningService"type="Spring.Scheduling.Quartz.JobDetailObject,Spring.Scheduling.Quartz">
<propertyname="JobType"value="QuartzNet.DiningService,QuartzNet"/>
<!--注入被调度的对象-->
<propertyname="JobDataAsMap">
<dictionary>
<entrykey="UserName"value="冬冬"/>
</dictionary>
</property>
</object>

<objectid="cronTrigger"type="Spring.Scheduling.Quartz.CronTriggerObject,Spring.Scheduling.Quartz">
<propertyname="jobDetail"ref="DiningService"/>
<!--每个5秒执行一次-->
<propertyname="cronExpressionString"value="0/5****?"/>
</object>


publicclassPersonService
{
publicstringUserName{get;set;}

publicvoidGoToBed()
{
Console.WriteLine("姓名{0}睡觉的时间是:{1}",UserName,DateTime.Now);
}
}


<!--注入的目标对象-->
<objectid="PersonService"type="QuartzNet.PersonService,QuartzNet">
<propertyname="UserName"value="刘冬"/>
</object>

<objectid="jobDetail"type="Spring.Scheduling.Quartz.MethodInvokingJobDetailFactoryObject,Spring.Scheduling.Quartz">
<!--不必继承IJob接口-->
<propertyname="TargetObject"ref="PersonService"/>
<propertyname="TargetMethod"value="GoToBed"/>
</object>

<objectid="jobDetailNonConcurrent"type="Spring.Scheduling.Quartz.MethodInvokingJobDetailFactoryObject,Spring.Scheduling.Quartz">
<propertyname="targetObject"ref="PersonService"/>
<propertyname="targetMethod"value="GoToBed"/>
<!--并发等待-->
<propertyname="concurrent"value="false"/>
</object>

<objectid="simpleTrigger"type="Spring.Scheduling.Quartz.SimpleTriggerObject,Spring.Scheduling.Quartz">
<propertyname="jobDetail"ref="jobDetail"/>
<!--从几秒开始-->
<propertyname="startDelay"value="0s"/>
<!--每隔5秒重复-->
<propertyname="repeatInterval"value="15s"/>
</object>


<objecttype="Spring.Scheduling.Quartz.SchedulerFactoryObject,Spring.Scheduling.Quartz">
<!--触发器-->
<propertyname="triggers">
<list>
<refobject="simpleTrigger"/>
<refobject="cronTrigger"/>
</list>
</property>
</object>

  运行效果:

原文见:http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_QuartzNet.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics