2016-03-22 5 views
0

私は、Springバッチで処理する複数のファイルを持つシナリオを持っています。分割されたステップ処理後のファイルの削除

私はこれを、パーティショナー を通して個々のファイルを個別に処理するマスターステップとパーティションスレーブステップで実装しました。これはうまくいきましたが、今度は正常に処理されたファイルをアーカイブ/削除します。

私はいくつかの方法を試していないが、何の成功:

スレーブステップStepExecutionListener上AfterStepの方法-inが、ライターは、マスタ工程の後に、新たなステップ-inファイル

のロックを保持しているが、私ドンれます処理されたファイル名を正常に処理する方法を知っていますが、これはスレーブステップと共有する必要がある情報であり、スレッドの安全性も考慮する必要があります。この方法はまた、すべてのスレーブステップが終了するのを待つという欠点も有する。事前に

おかげで、 エイドリアン

答えて

0

あなたがカスタマイズした場合、あなたが

public class CustomTasklet implements Tasklet { 

    @Override 
    public RepeatStatus execute(final StepContribution contribution, final ChunkContext chunkContext) throws Exception { 
    Collection<StepExecution> stepExecutions = chunkContext.getStepContext().getStepExecution().getJobExecution().getStepExecutions(); 
    for (StepExecution stepExecution : stepExecutions) { 
     if (stepExecution.getExecutionContext().containsKey("fileName") 
      && ExitStatus.COMPLETED.equals(stepExecution.getExitStatus())) { 

     String file = stepExecution.getExecutionContext().getString("fileName"); 
     // delete file 

     } 
    } 
    } 
} 

で正常に処理されたファイル名に到達することができ、ファイルの削除を開始する前に、あなたは終了するすべてのスレーブの手順を待つために受け入れることができるかどうかMultiResourcePartitioner.keyName、あなたは上記の "ファイル名"を変更する必要があります

+0

こんにちはマイケル、あなたの答えをありがとう、それは動作します。私はそこに各スレーブステップの後にファイルを削除するためのソリューションがないと思うので、私はそれを受け入れる必要があります。 –

関連する問題