通常排成都會寫一個專案,然後掛載在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)
{
//要做的工作
}
}