Quartz外部工具直接在Web專案內建立/執行排成

通常排成都會寫一個專案,然後掛載在Windows的排程服務器上去執行,但靠著Quartz這個第三方工具,可以在Web專案上直接建立並且執行排成。

首先要在專案的進入點(webform 在global.asax ,MVC在Startup.cs)
加上這些Code  (MVC建議像BundleConfig.cs這些一樣寫成一個ScheduleConfig.cs,在Startup.cs內呼叫,減少Startup複雜度)

 // 建立簡單的、以 RAM 為儲存體的排程器
            var schedulerFactory = new Quartz.Impl.StdSchedulerFactory();
            _task = schedulerFactory.GetScheduler();

// 建立工作
            IJobDetail job = JobBuilder.Create<JobClass>()   //JobClass為JOB執行要做的事,程式碼在下面
                .WithIdentity("JobSync", "group1")
                .Build();

// 建立觸發器
            ITrigger  trigger = TriggerBuilder.Create()
                .WithIdentity("JobSyncTrigger",  "group1")  
                .StartNow()                                                    //一開始就執行第一次
                .WithSimpleSchedule(x => x
                    .WithIntervalInHours(12)                          //每半天觸發一次
                    .RepeatForever())                                     //一直執行
                .Build();

// 把工作加入排程
            _task.ScheduleJob(job,  trigger);

// 啟動排程器
            _task.Start();

 

-------------------------------------------------------------------------------------------

排成執行工作的部分


[DisallowConcurrentExecutionAttribute]    //指這個繼承IJob的Class不能被兩次Instance化,代表同時只有一個排成可以執行這個工作
public  class  JobClass : IJob
{
    public  JobClass()
    {
    }

    public  void  Execute(IJobExecutionContext  context)
    {
        //要做的工作
    }
}