日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時間:2023/12/18 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring.NET教程(二十)——整合Quartz.NET(应用篇) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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表達式等等。

你曾經(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我們可以繼承該類?;蛘吲渲肧pring.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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。