在我們處理各類資訊系統的業務時,定時的排程問題會經常的涉及,quartz是java社群一個很成熟的解決方案,.net也有對應的開源實作,具體為:http://quartznet.sourceforge.net/
不過這個版本對vs2010和64的支援不好,今天抽了一些時間對以前的這些部分進行了更新,整理了一個初步的通用的方案。
具體的結構圖如下:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcugDMllTYlZTO1QDNhdzY0UmYhVTYjFzY3MTO5MmN2YmYfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
RemoteDemo
<quartz>
<add key="quartz.scheduler.proxy" value="true"/>
<add key="quartz.scheduler.proxy.address" value="tcp://localhost:555/QuartzScheduler"/>
</quartz>
有以上的配置後,隻要啟動排程,加入作業,即可以發送到排程服務
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = sf.GetScheduler();
Quartz.Server.Console / Quartz.Server.Service
調試時可以使用指令行;部署時使用Windows Service
quartz.config可以進行各種配置設定,例子中Sql Server 和sqlite都可以
[注意sqlite區分32/64平台,lib\sqlite是重新編譯版本,消除了對VC庫的依賴]
quartz.db是使用sql腳本建立的資料庫檔案
排程的内容存儲在資料庫中,以QRTZ_開頭的表,如下是一個例子排程的内容
QRTZ_JOB_DETAILS
remotelyAddedJob default JobDefinition.SimpleJob, JobDefinition 0 0 0 0
QRTZ_TRIGGERS
remotelyAddedTrigger default remotelyAddedJob default 0 634510595450000000 634510595400000000 5 ACQUIRED CRON 634510595000000000 0 0
定義作業
在quartz_jobs.xml中配置或用戶端代碼釋出均可
完整的代碼參考: