java - 如何使用 spring-batch 从文件夹中连续读取文件?

标签 java spring-batch

我正在使用 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/

相关文章:

java - 我必须做一个 Java 挑战,将真/假值显示为 1 和 0

java - SQL异常 : this driver is not configured for integrated authentication tomcat

java - 使用 JAVA 在远程机器上运行 powershell

spring - 在类路径资源 : factory-bean reference points back to the same bean definition 中定义的名称为 'employeesJob' 的 bean 定义无效

java - 选择什么技术? Spring Batch 还是 Hadoop?

java - Case 表达式必须是常量表达式

java Spring工厂-bean工厂-方法 Autowiring

spring-boot - Spring批处理。如何链接具有不同类型的多个itemProcessor?

spring-batch - 通过表列标志将读取的数据标记为 "processing",然后在最后恢复

java - Spring 批问题