2016-06-20 3 views

答えて

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を経由してあなたのItemWriterStepListenerにカスタマイズしたコンテキストクラスMyContextを使用することができます:あなたはすべてのクラスのために、このインスタンスを共有したい場合はシングルトンそれを作る

public class MyItemWriter implements ItemWriter { 

    @Inject 
    private MyContext myContext; 

    // then use it in your preferred method 
} 

をしかし、あなたのようにあなたの前の質問でステップパーティションを述べました、あなたの仕事はおそらくマルチスレッドで実行されています。並行性の問題に注意する必要があります。MyContextの属性に適切なデータ構造を使用する必要があります。

0

setTransientUserData(Object)は十分である必要があります。オブジェクトは必要に応じて作成されます。他の多くのオブジェクトを保持するために、より複雑なオブジェクトを作成することができます。

関連する問題