当前位置: 首页 > 面试题库 >

Spring批量处理后从目录中删除平面文件

颜啸
2023-03-14
问题内容

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

我尝试了FileDeletingTasklet删除目录中的文件,但是根据Spring
docs,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>

问题答案:

覆盖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;
}


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

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

  • 我正在为Windows 7编写批处理文件。 我目前有一个代码,可以从站点管理文件夹中的masters文件夹中删除旧备份。代码如下: 但是,我需要将其编码为仅删除超过3年的内容,这将是以下代码: 但是,我需要顶部代码中的内容,以便我可以从我们173个站点管理文件夹中存在的文件夹中删除所有*. bak文件。我正在努力解决这个问题。我不能让它从我们的其他文件夹中删除*. bak文件。 我已尝试组合代码,

  • 我试图利用spring-cloud-starter-stream-source-file app(https://github.com/spring-cloud-stream-app-starters/file/tree/master/spring-cloud-starter-stream-source-file)轮询一个目录,并将文件引用发送到定制处理器进行进一步处理。

  • 本文向大家介绍ThinkPHP删除栏目(实现批量删除栏目),包括了ThinkPHP删除栏目(实现批量删除栏目)的使用技巧和注意事项,需要的朋友参考一下 前段时间发表了一个删除栏目的随笔,当时实现的功能是删除一条信息,这次来实现一下批量删除栏目。 我们需要达到的是这样一个效果: 选中批量删除按钮后可以选中所有该页面的栏目,这个是前端页面的实现,在这里就不多说了,我们直接进入正题:批量删除的功能。 1

  • 我想知道这是否是一个更有效的方法来完成这个动作。 你可以看到我的日志:似乎不太好!