2016-03-30 5 views
0

writerからreader(私の場合はカスタムリーダー)から作成されたJavaオブジェクトを取得するにはどうすればよいですか?春のバッチからbeanセットにアクセスする方法

ジョブの実行後、例外とすべてのメール通知のためにcount of the records processedまたはskippedを保持する必要があります。私はそれを維持する必要はないので、execution contextに入れたくありません。

私はちょうど読者から豆を設定し、ライターからautowireをそれを使用できますか?

+0

あなたはJobContext – Panther

+0

でのカウントのようなだけで、関連する情報を永続化されていませんなぜ私が持続したい、しかし、SNSに通知を送信するだけでジョブの後に必要としません。このような値がたくさんあります。私の仕事は再開できません。私はすでにDB過負荷の仕事の後、関連するメタデータをクリアしています。 –

+0

私は現在JavaのThreadLocalフェッチを試みています。これは私をここで助けます:) –

答えて

0

単純にリーダー、ライターと同じクラスを使用して、インスタンス変数を共有することができます。実際には、ジョブの完了後に '@afterJob'メソッドにStepExecutionListenerを実装してメールを送信するなど、同じオブジェクトを使用しています。

これは、読者とライターが単純なコードを持っている場合には良いアプローチです。あるいは、そのコードを別のクラスに委譲することもできます。これは、実際のロジックを持つリーダライタクラスとセパレータクラスを分離し、それらのクラスにインスタンス変数を渡すことができます。 設定でリーダー、ライター、リスナーと同じクラスを定義するだけで済みます。

public class CommitWriter implements ItemWriter<myObject>, ItemReader<myObject> , StepExecutionListener{ 

private myPojo sharedObject; 

//Read method goes here 
public myObjectread() throws Exception{ 

} 
// Write method goes here 
public void write(List<? extends myObject> arg0) 
throws Exception { 

} 


//After job 
@Override 
public ExitStatus afterStep(StepExecution stepExecution) { 

} 

} 
+0

役に立った? – Panther

関連する問題