当前位置: 首页 > 知识库问答 >
问题:

Spring batch-flatfile处理后从目录中删除

宁鹏程
2023-03-14

在spring batch中,我使用MultiResourceItemReader从目录中读取多个文件。然后我使用FlatFileItemReader作为委托来处理各个文件。我的做法是,一旦文件被完全处理(读写完成),就删除它,然后multiResourceitemReader必须选择另一个文件,它必须继续。

我尝试了FileDeletingTasklet删除目录中的文件,但是按照Spring文档,execute方法只能调用一次。我如何才能实现删除文件处理(读写),但我不想与整个目录删除,一旦所有文件被处理完全在目录。

下面是我正在使用的工作:

<batch:job id="getEmpDetails">
    <batch:step id="readAndProcess" next="deleteProcessedFile">
        <batch:tasklet>
            <batch:chunk reader="readEmpDetails" writer="writeEmpDetails" commit-interval="100">
            </batch:chunk>
        </batch:tasklet>
    </batch:step>
    <batch:step id="deleteProcessedFile">
            <batch:tasklet ref="fileDeletingTasklet" />
    </batch:step>
</batch:job>
<bean id="fileDeletingTasklet" class="com.test.FileDeletingTasklet">
      <property name="directoryResource">
          <bean id="directory" class="org.springframework.core.io.FileSystemResource">
             <constructor-arg value="E:/testDir/file1.txt" />
        </bean>
      </property>
</bean>

共有1个答案

薛博赡
2023-03-14

FlatFileItemReader.setResource()方法重写为

public void setResource(Resource resource) {
  this.resource = resource;
  this.delegateReader.setResource(resource);
}

并在FlatFileItemReader.read()中管理流完全使用时的文件删除

public T read() throws Exception {
  T o = this.delegateReader.read();
  if (o == null) {
    // Perform deletion here
    deleteFile(this.resource);
  }
  return o;
}
 类似资料:
  • 我想用3个步骤建立一个批次。我想配置这个步骤,就像如果有100条记录,当step1读取、处理和写入一个10块时,step02,然后step03开始和结束,然后再次返回step1,读取下一个块。这在Spring批量可能吗?

  • 问题内容: 在spring batch中,我正在使用MultiResourceItemReader从目录中读取多个文件。然后,我使用FlatFileItemReader作为委托来处理单个文件。我的用例是,一旦文件被完全处理(READ- WRITE完成),则将其删除,然后multiResourceitemReader必须选择另一个文件并继续。 我尝试了FileDeletingTasklet删除目录中

  • 我对Mongo的Webservice调用返回以下JSON。我需要迭代这个JSON值并删除Item-product_语言,因为它包含NULL/空字符串。 你对怎么做有什么想法吗? Python 3.4版本。 { }

  • 我正在尝试删除URL的最后一个目录部分。我的URL如下所示: . 当点击按钮时,我想将其更改为 。(拆下最后一部分)。 我已经尝试了,这会导致 。 我应该使用什么正则表达式来执行此操作?

  • 我们的SpringBatch作业只有一个步骤,包括ItemReader、ItemProcessor和ItemWriter。我们用不同的参数同时运行同一个作业。ItemReader是有状态的,因为它包含从中读取的输入流。 因此,我们不希望ItemReader的相同实例用于每个JobInstance(作业参数)调用。 我不太确定哪种是这种情况的最佳“范围界定”。 1) 该步骤是否应该以@JobScop

  • 如何使用批处理脚本从文件中删除最后n行 我对批处理文件没有任何想法,我是第一次编写批处理文件。 我应该如何编写此批处理文件? 对于Windows7 试一试

  • 问题内容: 不会在Windows上删除只读文件。是否有与“ rm -rf”等效的python?为什么哦,为什么这么痛苦? 问题答案: 可以采用一个错误处理函数,该函数在删除文件时会遇到问题。您可以使用它来强制删除有问题的文件。 灵感来自http://mail.python.org/pipermail/tutor/2006-June/047551.html和http://techarttiki.bl

  • 我需要从多个目录中读取文件,并处理数据并将其存储到DB中。目前我正在使用块多资源阅读器,它适用于1个目录。但现在我必须从多个目录中读取文件。如何使用Spring批处理来做到这一点