我在當前項目中使用Quartz.NET創建了一個調度器。就我而言,所有必須創建的作業都存儲在一個表中,並且有一個單獨的用戶界面,可以添加新作業或編輯現有作業。我的問題是我如何能夠將表中的所有工作提交給Quartz調度器?我是否想要查詢表中的所有作業並遍歷它,創建JobDetails和Trigger對象?在這種情況下有沒有更好的方法?Quartz.Net作業存儲查詢
在這種情況下我想用RAMJobStore或AdoJobStore?
我在當前項目中使用Quartz.NET創建了一個調度器。就我而言,所有必須創建的作業都存儲在一個表中,並且有一個單獨的用戶界面,可以添加新作業或編輯現有作業。我的問題是我如何能夠將表中的所有工作提交給Quartz調度器?我是否想要查詢表中的所有作業並遍歷它,創建JobDetails和Trigger對象?在這種情況下有沒有更好的方法?Quartz.Net作業存儲查詢
在這種情況下我想用RAMJobStore或AdoJobStore?
你可以使用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表中。
感謝您的回覆。我在數據庫中有一張表,用於存儲業務的所有工作信息。調度程序在Windows服務中運行,並通過ASP.NET應用程序將作業添加到此表中或進行編輯。那麼我如何在這種情況下使用Quartz.NET?無論何時添加或編輯作業,都必須更新調度程序。 – Dnana
@Dnana:是你的windows服務還是Quartz.net的windows服務? – LeftyX
.net windows服務。在這種情況下,我不確定哪一個更好。 – Dnana