首页 > 解决方案 > 处理后如何将文件移动到存档和错误文件夹

问题描述

作业运行一次,并尝试在一个步骤中处理源文件夹中的所有可用文件。此外,它需要将已处理/尝试但失败的文件从源文件夹删除到另一个后续文件夹(/_archived、/_faild)。使用spring批处理分类移动存档文件夹中成功处理的文件和错误文件夹中未成功文件的最佳方法是什么。

标签: spring-batch

解决方案


您可以添加单独的tasklet或使用JobExecutionListener.afterJob挂钩来移动文件。

下面是使用移动文件的示例示例tasklet

Java 配置

@autowired
private MoveFilesTasklet moveFilesTasklet


    @Bean
    protected Step moveFiles() {
        return steps
          .get("moveFiles")
          .tasklet(moveFilesTasklet)
          .build();
    }

    @Bean
    public Job job() {
        return jobs
          .get("taskletsJob")
          .start(processFiles())
          .next(moveFiles())          
          .build();

小任务

@Component
public class MoveFilesTasklet implements Tasklet {     
        private String filePath ="someFilePAth";

    @Override
    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {    

        final File directory = new File(filePath);
        Arrays.asList(directory.listFiles((dir, name) -> name.matches("yourfilePrefix".*?")))
                .stream()
                .forEach(singleFile -> singleFile.renameTo(new File("someNewFilePath")));               
        return RepeatStatus.FINISHED;

    }

}

推荐阅读