私はオンデマンドでジョブを起動するASP.NETページを作成する予定です。現在のところ、SimpleTriggerクラスを使用してジョブをトリガーしていますが、__TriggerクラスのどれもJobParametersの値としてオブジェクト型をサポートしていないため、ジョブスケジューリングエンジンにパラメータを渡すためにWCF Tcpバインディングがフックで使用されています。カスタムパラメータ(シリアライズ可能)をジョブパラメータとして渡す方法を知りたい。 あなたのアドバイスありがとう!クォーツスケジューラ:カスタムオブジェクトをJobParameterとして渡す方法は?
答えて
ジョブをスケジュールするときにJobDetail
オブジェクトにJobDataMap
を設定し、これをスケジューラに渡すことができます。quartz.net tutorialに記載されているいくつかの制限があります。ジョブは、次の方法でデータにアクセスできます。
JobDataMap dataMap = context.JobDetail.JobDataMap;
ただし、私はジョブに注入されたリポジトリを介して自分のジョブ構成にアクセスすることをお勧めします。
データマップにインスタンスを渡し:
石英ジョブの実行時に取得することができるオブジェクトを渡す2つの方法があります。ジョブセットアップを設定すると、このようなキーでマップにインスタンスを追加します。
public void Execute(IJobExecutionContext context)
{
var dataMap = context.MergedJobDataMap;
var myInstance = (MyClass)dataMap["myKey"];
OR
追加:
// Create job etc...
var MyClass _myInstance;
statusJob.JobDataMap.Put("myKey", _myInstance);
// Schedule job...
は、このような仕事のExecute()
メソッドでインスタンスを取得します。ジョブを設定したときのインスタンスをスケジューラーコンテキストに設定します。
ISchedulerFactory schedFact = new StdSchedulerFactory();
_sched = schedFact.GetScheduler();
_sched.Start();
// Create job etc...
var MyClass _myInstance;
_sched.Context.Put("myKey", myInstance);
// Schedule job...
私は、マルチスレッド環境で上記hillstukの答えと予期しない結果を持っていた
public void Execute(IJobExecutionContext context)
{
var schedulerContext = context.Scheduler.Context;
var myInstance = (MyClass)schedulerContext.Get("myKey");
JobDataMapを使用する場合、MyClassインスタンスはどのようにシリアル化されていますか? '[Serializable]'で帰属させる必要がありますか? – Dejan
Dejan、私は[Serializable]を使用していないので、インスタンスはOKです。私が知る限り、Quartzで永続的なJobStoreを使用すると、シリアライゼーションが呼び出されます。 Quartzドキュメンテーションは、シリアライズの場合、プリミティブでない型を保存することを警告しています:http://quartz-scheduler.org/documentation/best-practices。それに基づいて私の答えの例はあなたにとって役に立たないかもしれません。 – hillstuk
:このような仕事のExecute()
メソッドでインスタンスを取得します。ここで はNewtonsoftを使用して、私のソリューションです...あなたはIJobDetailであなたのインスタンス/オブジェクトを置くことができます
public void InitJob() {
MyClass data = new MyClass {Foo = “Foo fighters”};
/* a unique identifier for demonstration purposes.. Use your own concoction here. */
int uniqueIdentifier = new Random().Next(int.MinValue, int.MaxValue);
IJobDetail newJob = JobBuilder.Create<MyAwesomeJob>()
.UsingJobData("JobData", JsonConvert.SerializeObject(data))
.WithIdentity($"job-{uniqueIdentifier}", "main")
.Build();
}
/* the execute method */
public class MyAwesomeJob : IJob
{
public void Execute(IJobExecutionContext context)
{
var jobData = JsonConvert.DeserializeObject<MyClass>(context.JobDetail.JobDataMap.GetString("JobData"));
}
}
/* for completeness */
public class MyClass {
string Foo { get; set; }
}
をお楽しみください。
JobDataMap m = new JobDataMap();
m.Put("Class1", new Class1(){name="xxx"});
IJobDetail job = JobBuilder.Create<Job>()
.WithIdentity("myJob", "group1")
.UsingJobData(m)//class object
.UsingJobData("name2", "Hello World!")
.Build();
使い方
public void Execute(IJobExecutionContext context)
{
JobDataMap dataMap = context.JobDetail.JobDataMap;
Class1 class1 = (Class1)dataMap.Get("Class1");
string x = class1.name;
}
- 1. カスタムオブジェクトをアプリエンジンエンドポイントに渡す方法
- 2. onEndPage()のカスタムオブジェクトを渡す方法itextメソッド?
- 3. ItemWriterでJobParameterとJobExecutionContextを取得する方法は?
- 4. NdefMessageを介してカスタムオブジェクトを渡す方法
- 5. カスタムオブジェクトをMenuItemに渡して後で取得する方法
- 6. JobParameter&ItemReader
- 7. ホステッドジョブスケジューラ(サービスとしてのクォーツスケジューラ)
- 8. HttpPostを使用して他のカスタムオブジェクトのリストを含むオブジェクトを渡す方法
- 9. $ .ajax(..)とカスタムオブジェクトをrefで渡す
- 10. 春休憩テンプレートでカスタムオブジェクトのリストを渡す方法
- 11. カスタムオブジェクトarraylistをアクティビティからフラグメントに渡す方法
- 12. Webサービス経由でカスタムオブジェクトを渡す方法
- 13. スワッガーエディタでapiのパラメータとしてカスタムオブジェクトを表現する方法
- 14. カスタムオブジェクトをモーダルポップアップに渡す
- 15. C#のカスタムオブジェクトをPowershellに渡します。
- 16. retrofit2でカスタムオブジェクトを渡します
- 17. AnyLogicでカスタムオブジェクトを使用してデータをプロットする方法は?
- 18. フィーチャファイルから辞書またはリストオブジェクトまたはカスタムオブジェクトを渡す方法
- 19. カスタムオブジェクトのMockitoリストを作成してアサートする方法は?
- 20. クォーツスケジューラ
- 21. カスタムオブジェクトの配列を返す方法は?
- 22. クォーツスケジューラおよび使用方法の依存関係私は、Apache Karafにクォーツスケジューラを使用しようとしていますOSGiバンドル
- 23. クォーツスケジューラは、JDBCStoreに
- 24. カスタムオブジェクトとしてform.serialize()をバインドします。
- 25. コンストラクタパラメータとしてクロージャを渡す方法
- 26. コンストラクタをコールバックとして渡す方法
- 27. - 型をパラメータとして渡す方法
- 28. ノードをパラメータとして渡す方法
- 29. カスタムマッピングの方法Firebase Datasnapshotとカスタムオブジェクト
- 30. カスタムオブジェクトをバンドルに入れる方法は?
お返事をお寄せいただきありがとうございますけれども、私が探していますが、外部アプリケーションからオブジェクトを渡す方法です。 –
これは私が知る必要があるものです...まだ検索中です – evermean
JobDataMapを使用せずにリポジトリをどのように注入しますか?それともあなたが注射するレポだけですか? –