2014-04-27 48 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的列表,然後在我的下一個步驟我執行我的自定義任務蕾刪除文件或移動文件基於加入進行文件名來實現它在名單上。