2012-10-03 77 views
2

我正在使用Spring集成輪詢文件的目錄,在服務類中處理此文件,將此文件寫入輸出目錄,然後刪除原始文件。彈出式集成,刪除出站通道適配器中的文件

我有下面的XML配置:

<int-file:inbound-channel-adapter id="filesInChannel" 
            directory="file:${java.io.tmpdir}/input" 
            auto-create-directory="true" > 
     <int:poller id="poller" fixed-delay="1000" /> 
    </int-file:inbound-channel-adapter> 

    <int:service-activator id="servicActivator" 
         input-channel="filesInChannel" 
         output-channel="filesOut" 
         ref="my_file_processing_service"> 
    </int:service-activator> 

    <int-file:outbound-channel-adapter id="filesOut" auto-create-directory="true" delete-source-files="true" directory="file:${java.io.tmpdir}/output"/> 

此調查的文件,把它傳遞給我的processing_service並將其複製到出站目錄。但是原始文件未被刪除。有沒有人有任何想法,爲什麼不呢?

回答

2

我知道這個問題是問很久以前,但也許答案會對別人有用。

爲何沒有被刪除的輸入文件中提供的原因的Spring Integration Reference

delete-source-files屬性將僅具有一個效果,如果 入站消息具有文件的有效載荷或如果FileHeaders.ORIGINAL_FILE 頭值包含源文件實例或表示原始文件路徑的字符串 。

您的留言未包含此特定標題。如果您使用standard file transformersFileToStringTransformerFileToByteArrayTransformer)之一,它將自動設置。或者,您可以使用header enricher手動設置它。

Behind the scenes這樣的事情是發生在文件變壓器:

... 
Message<?> transformedMessage = MessageBuilder.withPayload(result) 
     .copyHeaders(message.getHeaders()) 
     .setHeaderIfAbsent(FileHeaders.ORIGINAL_FILE, file) 
     .setHeaderIfAbsent(FileHeaders.FILENAME, file.getName()) 
     .build(); 
... 
相關問題