2013-03-11 66 views
1

在閱讀完所有教程後,仍然試圖將自己的思想包裝在Quartz.NET中,這些教程看起來非常特定於代碼,而不是專注於實現。這是我想要做的。我有20個SQL存儲過程執行各種事情,如查詢日誌表,重新提交數據到其他進程等。我希望這些SP定期運行一整天。所以Quartz.NET似乎很自然。我打算創建一個實現了Quartz.NET的Windows Svc,並在Quartz程序集所在的文件夾中包含程序集中的作業。使用Quartz.NET執行多個存儲過程

實現此目的的一個不好的方法,我認爲應該爲每個SP編寫一個單獨的作業類,併爲每個作業單獨分配一個觸發器。工作類將簡單地執行一個特定的SP,其名稱在該類中被硬編碼。這是不好的方法。

但是對於我的生活,我無法弄清楚什麼是好方法。顯然,只有一個通用的「按名稱執行SP」的單個作業類看起來像是一個簡單的SQL表,但是如何獲得與不同SP相關聯的不同觸發器,以及石英知道加載在單獨的線程上的所有二十個SP?

那麼Quartz會如何知道如何爲其中一個SP提供更改的觸發器?這是否必須是Win Svc的重新加載作業和觸發器的啓動/停止循環,還是我必須手動編寫某種「重新加載」?

有什麼想法?我誤解Quartz是什麼?這種措辭讓它聽起來像是一個企業調度程序,一個系統,你安裝的東西。所有的文檔OTOH使它看起來像是一堆你縫合在一起創建自己的調度程序或調度系統的類,與MS在.NET中提供的用於創建例如FTP的應用程序的類沒有什麼不同。也許我期待太多?

+0

//這個語言使得它聽起來像是企業調度程序,系統,您安裝的一個東西。所有的文檔OTOH使它看起來只是一堆你縫在一起的課程//這正是我所在的地方.............. – granadaCoder 2014-01-28 18:35:13

回答

1

一個非常簡單的方法來滿足您的要求可能是:

開始與樣本服務器

爲出發點採取Quartz.NET分佈的服務器,你必須有一個Windows服務現成的模板利用TopShelf易於安裝與變化檢測

使用XML配置

quartz.config文件包含實際配置,您可以看到作業和觸發器是從XML文件quartz_jobs.xml中讀取的。

您需要添加quartz.plugin.xml.scanInterval = 10要監視更改(每隔10秒)

使用觸發作業數據映射到參數化工作

您可以使用如果SQL執行如你所提議的那樣微不足道,那麼每個觸發器都有相同的作業類。只需添加需要的配置來觸發的定義XML中(樣本這裏運行,每十秒鐘,只要你想添加儘可能多的觸發器):

<trigger> 
    <simple> 
    <name>sqlTrigger1</name> 
    <job-name>genericSqlJob</job-name> 
    <job-group>sqlJobs</job-group> 
    <job-data-map> 
     <entry> 
     <key>sql_to_run</key> 
     <value>select 1</value> 
     </entry> 
    </job-data-map> 
    <misfire-instruction>SmartPolicy</misfire-instruction> 
    <repeat-count>-1</repeat-count> 
    <repeat-interval>10000</repeat-interval> 
    </simple> 
</trigger> 

只需使用quartz_jobs.xml爲基礎,做出必要的更改。在你的工作

您可以從同時包含作業的和觸發的參數,後者壓倒前者上下文的MergedJobDataMap訪問你的工作配置

使用配置。

public void Execute(IJobExecutionContext context) 
{ 
    string sqlToRun = context.MergedJobDataMap.GetString("sql_to_run"); 
    SqlTemplate.ExecuteSql(sqlToRun); 
} 
+0

謝謝,這清除了很多。 – 2013-03-12 14:43:27