Step Listener と Writer の間で複数の変数を渡す必要があります。StepCtx.setTransientUserData() を使用すると、1 つの変数しか渡すことができません。
複数の変数を渡すには、マップ/クラスを作成して渡す必要がありますか、それともより良い方法がありますか?
Step Listener と Writer の間で複数の変数を渡す必要があります。StepCtx.setTransientUserData() を使用すると、1 つの変数しか渡すことができません。
複数の変数を渡すには、マップ/クラスを作成して渡す必要がありますか、それともより良い方法がありますか?
おっしゃる通り、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 を介しMyContext
てItemWriter
、カスタマイズしたコンテキスト クラスを で使用できます。StepListener
public class MyItemWriter implements ItemWriter {
@Inject
private MyContext myContext;
// then use it in your preferred method
}
ただし、前の質問でステップ パーティションについて言及したように、ジョブはおそらくマルチスレッドで実行されています。同時実行の問題に注意する必要があります: の属性に適切なデータ構造を使用する必要がありますMyContext
。