我正在使用 spring-batch
处理一个文件夹中的多个 csv
文件,使用 spring-batch
。类似如下:
@Bean
public ItemReader<String> reader() {
MultiResourceItemReader<String> reader = new MultiResourceItemReader<>();
reader.setResources(new Resource[] {new FileSystemResource("/myfolder/*.csv")});
reader.setDelegate(new FlatFileItemReader<>(..));
return reader;
}
作业是单线程执行器。
问题:每当文件夹中添加新文件时,如何将它们添加到列表中并使用作业自动导入?
此文件夹中每天大约有 30.000 个文件。 我可以告诉 spring-batch 自动检测新文件吗?
或者我是否总是必须在作业完成后立即重新启 Action 业,以便它开始导入在作业运行时添加的文件?
最佳答案
SpringBatch 是一个“静态”的东西。一旦工作开始,它就定义了它将做什么并且不能改变(......不做讨厌的黑客攻击)。
因此,一旦作业开始,您就无法更改 MultiResourceItemReader 的定义。
因此,作业的一次执行仅处理作业启动时存在的文件,为了处理稍后到达的文件,需要触发作业的另一次执行。
理解这一点很重要,SpringBatch 不是一个作业控制系统。 SpringBatch 在这里定义作业并执行作业运行。但是,为了触发作业开始,您还需要其他东西。
如建议的那样,这可能是一个 cron-job、spring-integration、springs Scheduler-Annotations,...正如 Stimpson Cat 所建议的。
此外,根据我自己的经验,我还建议使用 Essex Boy 提出的目录结构
关于java - 如何使用 spring-batch 从文件夹中连续读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43739772/