2011-06-28 128 views
8

我在當前項目中使用Quartz.NET創建了一個調度器。就我而言,所有必須創建的作業都存儲在一個表中,並且有一個單獨的用戶界面,可以添加新作業或編輯現有作業。我的問題是我如何能夠將表中的所有工作提交給Quartz調度器?我是否想要查詢表中的所有作業並遍歷它,創建JobDetails和Trigger對象?在這種情況下有沒有更好的方法?Quartz.Net作業存儲查詢

在這種情況下我想用RAMJobStore或AdoJobStore?

回答

17

你可以使用AdoJobStore。
Quartz.net將在數據庫中使用一組與前綴QRTZ_(你可以改變它,如果你想)表來存儲作業,觸發器和這些對象的狀態。
我想你想在你的數據庫中有一張桌子,你要保留關於你的日程安排的擴展信息,對嗎?
您將不會直接訪問Quartz.net表,因爲您將使用Quartz.net提供的API。

的方法來創建一個作業細節和觸發是直截了當的並且在tutorials描述得非常好。

要配置您的應用程序使用AdoJobStore你在你的app.config文件來指定一些信息。 下面是一個例子:

<quartz> 
    <add key="quartz.scheduler.instanceName" value="myApp" /> 
    <add key="quartz.scheduler.instanceId" value="MyApp" /> 
    <!-- Configure Thread Pool --> 
    <add key="quartz.threadPool.type" 
        value="Quartz.Simpl.SimpleThreadPool, Quartz" /> 
    <add key="quartz.threadPool.threadCount" value="10" /> 
    <add key="quartz.threadPool.threadPriority" value="Normal" /> 
    <!-- Configure Job Store --> 
    <add key="quartz.jobStore.misfireThreshold" value="60000" /> 
    <add key="quartz.jobStore.type" 
        value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" /> 
    <add key="quartz.jobStore.useProperties" value="true" /> 
    <add key="quartz.jobStore.dataSource" value="default" /> 
    <add key="quartz.jobStore.tablePrefix" value="QRTZ_" /> 
    <add key="quartz.jobStore.lockHandler.type" 
       value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" /> 
    <add key="quartz.dataSource.default.connectionString" 
     value="Server=SVSQL2008;Database=QuartzNet1;Trusted_Connection=True;" /> 
    <add key="quartz.dataSource.default.provider" value="SqlServer-20" /> 
    </quartz> 

有幾件事情要記住取決於如果你在一個Web應用程序或服務或winform應用程序託管Quartz.net。 最好的方法是將SchedulerFactory和Scheduler創建爲單例。 您可以收集更多的信息here

UPDATE

所有你必須創建Quartz.net表的第一(見Step 1),然後你就必須爲optiomization創建幾個指標(見page的底部)。

既然你要使用Web應用程序來提交您的工作,但你沒有使用該應用爲你不需要啓動調度的quartz.net事件(觸發)。 有幾個步驟,遵循這一邊:

你有線程池類型更改爲ZeroSizeThreadPool

<add key="quartz.threadPool.type" 
        value="Quartz.Simpl.ZeroSizeThreadPool, Quartz" /> 

,你必須確定你的StdSchedulerFactory和調度單。您可以在應用程序(asp.net)引導期間啓動。

你永遠不會啓動調度程序(你的Windows服務將使用)。

要記住的另一件事是你需要在你的web和你的windows服務之間共享你的job,所以最好把它保存在一個單獨的程序集中。

你提到過你在一張表中存儲了一些信息。 你仍然需要提交你的工作,並觸發哪些將保存在Quartz.net表中。

+0

感謝您的回覆。我在數據庫中有一張表,用於存儲業務的所有工作信息。調度程序在Windows服務中運行,並通過ASP.NET應用程序將作業添加到此表中或進行編輯。那麼我如何在這種情況下使用Quartz.NET?無論何時添加或編輯作業,都必須更新調度程序。 – Dnana

+0

@Dnana:是你的windows服務還是Quartz.net的windows服務? – LeftyX

+0

.net windows服務。在這種情況下,我不確定哪一個更好。 – Dnana