在我們平時(shí)做開發(fā)的時(shí)候,時(shí)常會(huì)用到定時(shí)任務(wù)觸發(fā)某個(gè)特定邏輯業(yè)務(wù)以便數(shù)據(jù)能及時(shí)更新

如果你不想用Windows服務(wù), 可以使用Quartz.Net在項(xiàng)目中編寫定時(shí)任務(wù)調(diào)度,簡簡單單幾行代碼就能搞定。


簡介:想要定時(shí)抓取、定時(shí)更新數(shù)據(jù)又不想使用windows服務(wù),Quartz.Net組件將會(huì)是你最好的選擇。


下面來看下Quartz.Net使用方法,下面的DEMO只針對Quartz使用做出詳細(xì)說明,程序中一些其他邏輯沒編寫,請自行領(lǐng)悟。

Quartz Cron表達(dá)式在線生成工具


1,將Quartz.dll引用到項(xiàng)目后,先在Web.configconfiguration節(jié)點(diǎn)中設(shè)置定時(shí)所需節(jié)點(diǎn)

  <configSections>
    <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  </configSections>
 <quartz>
    <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler" />

    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
    <add key="quartz.threadPool.threadCount" value="10" />
    <add key="quartz.threadPool.threadPriority" value="2" />

    <add key="quartz.jobStore.misfireThreshold" value="60000" />
    <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />
  </quartz>



2,編寫定時(shí)任務(wù),處理定時(shí)邏輯

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Quartz;

namespace PostDatas
{
    public class TimeJob : IJob
    {
        /// <summary>
        /// 將要定時(shí)執(zhí)行的邏輯代碼寫于此處
        /// 此處只做模擬,如需邏輯請自行編寫
        /// 作者:hnxxbl.cn
        /// </summary>
        /// <param name="context"></param>
        public void Execute(IJobExecutionContext context)
        {
            //將要定時(shí)執(zhí)行的邏輯代碼寫于此處
            PostHelper.HttpPostData();
        }
    }
}


3,在Global.asax中啟動(dòng)當(dāng)時(shí)任務(wù)、處理定時(shí)周期等參數(shù)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using Quartz;
using Quartz.Impl;

namespace PostDatas
{
    public class Global : System.Web.HttpApplication
    {
        /// <summary>
        /// 調(diào)用定時(shí)任務(wù)
        /// 作者:hnxxbl.cn
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Application_Start(object sender, EventArgs e)
        {
            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler scheduler = sf.GetScheduler();
            IJobDetail job = JobBuilder.Create<TimeJob>().WithIdentity("job1", "mygroup").Build();
            ITrigger trigger = TriggerBuilder.Create().StartAt(DateTime.Now.AddSeconds(5)).WithCronSchedule("/2 * * ? * *").Build();
            scheduler.ScheduleJob(job, trigger);
            scheduler.Start();
        }
    
        protected void Session_Start(object sender, EventArgs e)
        {

        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {

        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {

        }

        protected void Application_Error(object sender, EventArgs e)
        {

        }

        protected void Session_End(object sender, EventArgs e)
        {

        }

        protected void Application_End(object sender, EventArgs e)
        {

        }
    }
}
4,大功告成,只要編寫沒問題,程序啟動(dòng)后,在設(shè)定的時(shí)間周期內(nèi)此定時(shí)任務(wù)就會(huì)按照時(shí)間周期去定時(shí)觸發(fā)。


如有不理解的,可以下載DEMO源碼體驗(yàn)一下,為了更清晰看到執(zhí)行周期,請自行添加日志文件記錄執(zhí)行記錄。


C#使用Quartz.Net實(shí)現(xiàn)定時(shí)作業(yè)定時(shí)任務(wù)DEMO源碼


原文鏈接C#使用Quartz.Net實(shí)現(xiàn)定時(shí)作業(yè)定時(shí)任務(wù)DEMO源碼