毎日8:00と20:00にクラスでメソッドを実行するためにQuartz.Net(バージョン2)を使用しています(IntervalInHours = 12)
Quartz.Netのチュートリアルと同じジョブとトリガーを使用したので、すべて問題ありませんが、クラスでいくつかの引数を渡し、それらの引数に基づいてメソッドを実行する必要があります。
Quartz.Netの使用中に引数を使用する方法を教えてもらえますか?
JobDataMap を使用できます
jobDetail.JobDataMap["jobSays"] = "Hello World!";
jobDetail.JobDataMap["myFloatValue"] = 3.141f;
jobDetail.JobDataMap["myStateData"] = new ArrayList();
public class DumbJob : IJob
{
public void Execute(JobExecutionContext context)
{
string instName = context.JobDetail.Name;
string instGroup = context.JobDetail.Group;
JobDataMap dataMap = context.JobDetail.JobDataMap;
string jobSays = dataMap.GetString("jobSays");
float myFloatValue = dataMap.GetFloat("myFloatValue");
ArrayList state = (ArrayList) dataMap["myStateData"];
state.Add(DateTime.UtcNow);
Console.WriteLine("Instance {0} of DumbJob says: {1}", instName, jobSays);
}
}
@ArsenMkrtの回答を拡張するために、 2.x-style fluent job config を実行している場合は、次のようにJobDataMap
をロードできます。
var job = JobBuilder.Create<MyJob>()
.WithIdentity("job name")
.UsingJobData("x", x)
.UsingJobData("y", y)
.Build();
@ arsen-mkrtchyanの投稿を少し拡張して、本番環境での苦痛なサポートQuartzコードを回避できる重要なメモを付けましょう。
永続的なJobStoreを使用している場合は、JobDataMapのバージョン管理について覚えておいてください。 AdoJobStore。
ドキュメントにも記載されていますが、それほど強調されていませんが、たとえば次のような場合、大きなメンテナンスの問題が発生する可能性があります。アプリの次のバージョンでいくつかのパラメーターを削除します。
永続的なJobStore(このチュートリアルのJobStoreセクションで説明)を使用する場合は、JobDataMapに何を配置するかを慎重に決定する必要があります。これは、その中のオブジェクトがシリアル化されるため、クラスバージョン管理の問題が発生しやすくなるためです。
また、 関連ドキュメント に記載されているJobStoreの構成に関する関連メモがあります。
「quartz.jobStore.useProperties」構成パラメーターを「true」(デフォルトはfalse)に設定して、JobDataMapsのすべての値が文字列になることをAdoJobStoreに指示できるため、保存するのではなく、名前と値のペアとして保存できます。 BLOB列のシリアル化された形式のより複雑なオブジェクト。非文字列クラスをBLOBにシリアル化する際に発生するクラスのバージョン管理の問題を回避できるため、これは長期的にははるかに安全です。