Spring.NET教程(二十)——整合Quartz.NET(应用篇)
Quartz.NET是一個開源的作業(yè)調(diào)度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#寫成,可用于WinForm和ASP.NET應(yīng)用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執(zhí)行一個作業(yè)而創(chuàng)建簡單的或復(fù)雜的調(diào)度。它有很多特征,如:數(shù)據(jù)庫支持,集群,插件,支持cron-like表達(dá)式等等。
你曾經(jīng)需要應(yīng)用執(zhí)行一個任務(wù)嗎?這個任務(wù)每天或每周星期二晚上11:30,或許僅僅每個月的最后一天執(zhí)行。一個自動執(zhí)行而無須干預(yù)的任務(wù)在執(zhí)行過程中如果發(fā)生一個嚴(yán)重錯誤,應(yīng)用能夠知到其執(zhí)行失敗并嘗試重新執(zhí)行嗎?你和你的團隊是用.NET編程嗎?如果這些問題中任何一個你回答是,那么你應(yīng)該使用Quartz.NET調(diào)度器。 Quartz.NET允許開發(fā)人員根據(jù)時間間隔(或天)來調(diào)度作業(yè)。它實現(xiàn)了作業(yè)和觸發(fā)器的多對多關(guān)系,還能把多個作業(yè)與不同的觸發(fā)器關(guān)聯(lián)。整合了 Quartz.NET的應(yīng)用程序可以重用來自不同事件的作業(yè),還可以為一個事件組合多個作業(yè)。
Quartz.NET使用Trigger,Job和JobDetail對象的組合來實現(xiàn)工作調(diào)度,可以參考博客:http://www.cnblogs.com/shanyou/archive/2007/08/25/QuartzNETtutorial.html
Spring.NET現(xiàn)在已經(jīng)支持了Quartz.NET,在以后的開發(fā)中我們僅需要配置一下屬性就能輕松使用Quartz.NET。
Spring.NET提供了QuartzJobObject基類,該類繼承IJob接口。實現(xiàn)一個Job我們可以繼承該類。或者配置Spring.NET提供的MethodInvokingJobDetailFactoryObject對象。而實現(xiàn)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" />
<!-- 注入被調(diào)度的對象 -->
<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秒執(zhí)行一次 -->
<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
<!--注入的目標(biāo)對象-->
<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" />
<!-- 并發(fā)等待 -->
<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秒重復(fù) -->
<property name="repeatInterval" value="15s" />
</object>
?
triggers
<object type="Spring.Scheduling.Quartz.SchedulerFactoryObject, Spring.Scheduling.Quartz">
<!--觸發(fā)器-->
<property name="triggers">
<list>
<ref object="simpleTrigger" />
<ref object="cronTrigger" />
</list>
</property>
</object>
運行效果:
轉(zhuǎn)載于:https://www.cnblogs.com/millen/archive/2009/12/30/1635993.html
總結(jié)
以上是生活随笔為你收集整理的Spring.NET教程(二十)——整合Quartz.NET(应用篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客小白月赛12 I华华和月月逛公园
- 下一篇: 牛客小白月赛12 C华华给月月出题 (