簡介:Quartz.net是一個開源的作用調度框架,非常強大,能夠通過簡單的配置幫助我們定時具體的操作。相對於我們用的線程里面while(true)然后sleep來執行某個操作,應該算的上是高端,大氣,上檔次了。目前最新版本是2.2,新的版本里面有些方法名發生了變化,從之前的版本用過來的人應該會有體會.這里我使用最常用,也是最穩定的方式--Windows服務里面使用Quartz.net,並且使用配置的方式來設置觸發器。
步驟:
1.定義使用的job:就是我們具體要執行的操作.
namespace Quartz.MyJobs { public class HelloWorldJob : IJob { #region IJob 成員 public void Execute(IJobExecutionContext context) { //LogHelper.LogHelper.Log("執行HelloWorld Job"); String path = AppDomain.CurrentDomain.BaseDirectory + "Job\\"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } File.AppendAllText(path + "job.txt", DateTime.Now + "\n"); } #endregion } }
有了job,之后就在配置里面以Cron表達式的方式來設置Trigger和job配置節(quartz_jobs.xml)
<?xml version="1.0" encoding="UTF-8"?> <!-- This file contains job definitions in schema version 2.0 format --> <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"> <processing-directives> <overwrite-existing-data>true</overwrite-existing-data> </processing-directives> <schedule> <job> <name>HelloWorldJob</name> <group>sampleGroup</group> <description>Sample job for Quartz Server</description> <job-type>Quartz.MyJobs.HelloWorldJob, Quartz.MyJobs</job-type> <durable>true</durable> <recover>false</recover> </job> <trigger> <cron> <name>sampleSimpleTrigger</name> <group>sampleSimpleGroup</group> <description>Simple trigger to simply fire sample job</description> <job-name>HelloWorldJob</job-name> <job-group>sampleGroup</job-group> <cron-expression>0/3 * * * * ?</cron-expression> <!--每3秒中執行一次--> </cron> </trigger> </schedule> </job-scheduling-data>
還有有一個quartz.config配置文件,里面有這樣一行:quartz.plugin.xml.fileNames = ~/quartz_jobs.xml(這里的文件對應我們上面配置文件夾)。
現在job和trigger已經定義好了,接下來我們在Windows服務里面聲明一個調度器把兩者結合起來就OK了。
namespace Quartz.WinService { partial class MyQuartzService : ServiceBase { IScheduler sched = null; public MyQuartzService() { InitializeComponent(); ISchedulerFactory factory = new StdSchedulerFactory(); sched = factory.GetScheduler(); } protected override void OnStart(string[] args) { sched.Start(); LogHelper.LogHelper.Log("服務啟動..."); } protected override void OnStop() { sched.Shutdown(); LogHelper.LogHelper.Log("服務停止"); } } }
到這里就結束了。如果你的項目里面需要定時執行某個操作,使用Quartz.net絕對是非常棒的選擇。
關於Cron表達式的了解可以點擊這里