分区步骤处理后删除文件

时间:2016-03-22 11:00:29

标签: spring-batch

我有一个使用Spring Batch处理多个文件的场景。

我使用主步骤和分区从属步骤实现了这一步骤,该步骤通过分区程序处理每个文件 它工作正常,但现在我想存档/删除成功处理的文件。

我尝试了几种方法但没有成功:

- 在slave步骤StepExecutionListener上的afterStep方法,但是编写器正在锁定文件

- 在主步骤之后的新步骤,但我不知道如何获得成功处理的文件名,我想这是一个必须与从属步骤共享的信息,也必须考虑线程安全性。这种方法的缺点是它等待所有从属步骤结束。

提前致谢, 阿德里安

1 个答案:

答案 0 :(得分:1)

如果您可以接受在开始删除文件之前等待所有从属步骤结束,则可以使用

来访问成功处理的文件名
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,则需要更改上面的“fileName”