spring-batch - 处理后如何将文件移动到存档和错误文件夹
问题描述
作业运行一次,并尝试在一个步骤中处理源文件夹中的所有可用文件。此外,它需要将已处理/尝试但失败的文件从源文件夹删除到另一个后续文件夹(/_archived、/_faild)。使用spring批处理分类移动存档文件夹中成功处理的文件和错误文件夹中未成功文件的最佳方法是什么。
解决方案
您可以添加单独的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;
}
}
推荐阅读
- r - 如何在 R mgcv 包中实现具有共同轨迹和不同比例的随机平滑?
- python - 回调中的Python可变参数数量
- sql - (Postgres)如何根据行的值设置值
- python - 使用 x 轴日期范围时不绘制绘图
- android - 混合两个 16 位编码的立体声 PCM 样本,导致生成的音频中出现噪音和失真
- android - 如何检查文件夹是否存在于垃圾箱中或不在谷歌驱动器中?
- java - 当 Int 值从零/0 开始时,为什么不显示精确值?
- c++ - 具有唯一字符的字符串的最小子集
- bash - 通过 Fastlane 分发 Firebase 应用程序“服务器以状态 403 响应”
- discord.py-rewrite - 试图提出建议,但频道 ID 给出了命令错误