私は2つのステップでジョブを持っていますが、その2つのステップはパーティション化されたステップです。区分レベルのステップ・コンポーネントで使用可能なジョブ・レベル・オブジェクト・プール
手順は、基本的には、Luceneの索引付け(第一工程)、Luceneの検索ステップ(第2ステップ)であり、今はステップPartitioner
でのLuceneリーダー、LuceneのサーチャーとのLuceneライターオブジェクトを作成し、関連するステップコンポーネントに通過したのよう@Value
アノテーションを使用して。
現在、要件の変更があり、現在のスレッド(現在のパーティションステップ)の別のスレッド(別のパーティション化されたステップ)のライターオブジェクトが必要になることもありますが、Luceneは同じディレクトリに対して複数のライターオブジェクトを作成できないため、これらのオブジェクトは分割されたステップにまたがります。
解決策は、これらすべてのオブジェクトを含むジョブレベルMap
を作成することです。これらのオブジェクトは、ステップコンポーネント(リーダー、プロセッサーまたはライター)で必要なときにマップから取得し、最後にこれらのオブジェクトをすべて破棄します仕事の終わりに。
どうすればこの問題を解決できますか?つまり、これらのオブジェクトをjobExecution.getExecutionContext()
のJobExecutionListenerSupport
のbeforeJob(JobExecution jobExecution)
メソッドに入れても問題ありませんか?
どうすればいいですか?このマップの特定のオブジェクトは、リーダーのプロセッサ&にありますか?設定時には実行時にはわかりません。
最後に、JobExecutionListenerSupport
のafterJob(JobExecution jobExecution)
メソッドでこれらのオブジェクトを閉じます。
私は注釈ベースのSpringバッチ設定とLucene 6.0を使用しています。
お勧めします。