ステップリスナーとライターの間に1つ以上の変数を渡す必要があります。 StepCtx.setTransientUserData()を使用して、私は1つの変数だけを渡すことができます。JSR 352:ステップコンテキスト/ジョブコンテキストを使用して複数の変数を渡す?
複数の変数を渡すには地図/クラスを作成して渡すか、それとも良い方法がありますか?
ステップリスナーとライターの間に1つ以上の変数を渡す必要があります。 StepCtx.setTransientUserData()を使用して、私は1つの変数だけを渡すことができます。JSR 352:ステップコンテキスト/ジョブコンテキストを使用して複数の変数を渡す?
複数の変数を渡すには地図/クラスを作成して渡すか、それとも良い方法がありますか?
JobContextまたはStepContextに関係なく、メソッドsetTransientUserData(Object)
は1つの変数しか渡すことができません。これは実用的ではありません。たぶん複雑な使い方のために設計されたものではないかもしれませんが、わかりません。
ただし、変数を格納する独自のコンテキストを定義できます。その後
import javax.inject.Named;
import javax.inject.Singleton;
@Named
@Singleton
public class MyContext {
private int rowCount;
private Map<String, String> params;
// or other things ...
}
、あなたがCDIを経由してあなたのItemWriter
、StepListener
にカスタマイズしたコンテキストクラスMyContext
を使用することができます:あなたはすべてのクラスのために、このインスタンスを共有したい場合はシングルトンそれを作る
public class MyItemWriter implements ItemWriter {
@Inject
private MyContext myContext;
// then use it in your preferred method
}
をしかし、あなたのようにあなたの前の質問でステップパーティションを述べました、あなたの仕事はおそらくマルチスレッドで実行されています。並行性の問題に注意する必要があります。MyContext
の属性に適切なデータ構造を使用する必要があります。
setTransientUserData(Object)は十分である必要があります。オブジェクトは必要に応じて作成されます。他の多くのオブジェクトを保持するために、より複雑なオブジェクトを作成することができます。