2014-04-27 47 views
4

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

我试过FileDeletingTasklet删除目录中的文件,但按照Spring文档,execute方法只会被调用一次。我如何实现文件上被删除的文件(READ-WRITE),但是一旦所有文件在目录中完全处理完毕,我就不想用整个目录删除。

下面是我使用的工作:

<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> 

回答

3

重写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; 
} 
1

我已经在jobcontext的列表,然后在我的下一个步骤我执行我的自定义任务蕾删除文件或移动文件基于加入进行文件名来实现它在名单上。