2011-06-28 9 views
8

現在のプロジェクトでQuartz.NETを使用してスケジューラを作成しています。私の場合、作成されなければならないすべてのジョブは単一のテーブルに格納されており、新しいジョブを追加したり、既存のジョブを編集したりできる別個のUIがあります。私の質問は、どのようにテーブルのすべてのジョブをQuartzスケジューラに送ることができるかです。テーブル内のすべてのジョブをクエリし、それを繰り返してJobDetailsオブジェクトとTriggerオブジェクトを作成しますか?この場合、より良い方法はありますか?Quartz.Net Job Storage Query

この場合、RAMJobStoreまたはAdoJobStoreを使用しますか?

答えて

17

AdoJobStoreを使用できます。
Quartz.netは、データベースに格納されているジョブ、トリガー、およびこれらのオブジェクトの状態をプレフィックスQRTZ_(必要に応じて変更できます)のテーブルセットを使用します。
私はあなたのスケジュールに関する詳細情報を保持する予定のあなたのDBにテーブルを持っていたいと思いますか?
Quartz.netが提供するAPIを使用するため、Quartz.netテーブルに直接アクセスすることはありません。

ジョブの詳細とトリガーを作成するプロセスは簡単で、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アプリケーションまたはサービスまたはWinフォームアプリでQuartz.netをホスティングしている場合によっては心に留めておくべき点がいくつかあります。 ベスト・アプローチは、SchedulerFactoryとSchedulerをシングルトンとして作成することです。 さらに多くの情報を集めることができますhere

UPDATE:あなたはQuartz.netテーブルを作成する必要があります(Step 1を参照)、その後、あなたがoptiomizationためのいくつかのインデックスを作成する必要がありますすべての

まず(pageの下を参照してください)。

ウェブアプリケーションを使用してジョブを送信しますが、そのアプリケーションをquartz.netイベント(トリガー)に使用していないので、スケジューラーを開始する必要はありません。 あり、この側面に従うようにいくつかの手順です:あなたは

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

ZeroSizeThreadPool

にスレッドプールの種類を変更する必要があり

は、あなたのStdSchedulerFactoryとスケジューラのシングルトンを定義する必要があります。アプリケーション(asp.net)ブートストラップ中に起動することができます。

スケジューラを起動することは決してありません(あなたのWindowsサービスはこれを使用します)。

覚えておくべきもう1つのことは、ウェブとWindowsサービスの間であなたのjobを共有する必要があるということです。別のアセンブリに保管することをお勧めします。

あなたは、いくつかの情報をテーブルの1つに保存していると述べました。 Quartz.netテーブルで保持されるジョブとトリガーをサブミットする必要があります。

+0

ご返信ありがとうございます。データベースには、ビジネスのすべてのジョブ情報を格納する単一のテーブルがあります。スケジューラはWindowsサービスで実行されており、ASP.NETアプリケーションを介してジョブがこのテーブルに追加または編集されます。では、このケースでQuartz.NETをどのように使用できますか?ジョブが追加または編集されるたびに、スケジューラを更新する必要があります。 – Dnana

+0

@Dnana:WindowsサービスかQuartz.net Windowsサービスですか? – LeftyX

+0

.net windowsサービス。この場合、どちらが良いかはわかりません。 – Dnana