2016-12-27 9 views
0

私は2つのステップでジョブを持っていますが、その2つのステップはパーティション化されたステップです。区分レベルのステップ・コンポーネントで使用可能なジョブ・レベル・オブジェクト・プール

手順は、基本的には、Luceneの索引付け(第一工程)、Luceneの検索ステップ(第2ステップ)であり、今はステップPartitionerでのLuceneリーダー、LuceneのサーチャーとのLuceneライターオブジェクトを作成し、関連するステップコンポーネントに通過したのよう@Valueアノテーションを使用して。

現在、要件の変更があり、現在のスレッド(現在のパーティションステップ)の別のスレッド(別のパーティション化されたステップ)のライターオブジェクトが必要になることもありますが、Luceneは同じディレクトリに対して複数のライターオブジェクトを作成できないため、これらのオブジェクトは分割されたステップにまたがります。

解決策は、これらすべてのオブジェクトを含むジョブレベルMapを作成することです。これらのオブジェクトは、ステップコンポーネント(リーダー、プロセッサーまたはライター)で必要なときにマップから取得し、最後にこれらのオブジェクトをすべて破棄します仕事の終わりに。

どうすればこの問題を解決できますか?つまり、これらのオブジェクトをjobExecution.getExecutionContext()JobExecutionListenerSupportbeforeJob(JobExecution jobExecution)メソッドに入れても問題ありませんか?

どうすればいいですか?このマップの特定のオブジェクトは、リーダーのプロセッサ&にありますか?設定時には実行時にはわかりません。

最後に、JobExecutionListenerSupportafterJob(JobExecution jobExecution)メソッドでこれらのオブジェクトを閉じます。

私は注釈ベースのSpringバッチ設定とLucene 6.0を使用しています。

お勧めします。

答えて

0

これらのオブジェクトをExecutionContext - jobExecution.getExecutionContext()に入れてbeforeJob(JobExecution jobExecution)という方法で入力してから、これらのリソースを閉じるとafterJob(JobExecution jobExecution)になっても問題ありません。私は何の問題も見ません。

私は必要なコンポーネントに - @Value("#{jobExecutionContext}")を単に注入します。

関連する問題