2014-09-05 33 views
2

我已經定義了一個ftp:入站通道適配器,它將被作業和自定義過濾器觸發,該過濾器檢查文件名是否匹配模式,它以前沒有處理特定的工作。將作業參數傳遞到彈簧集成過濾器ftp:入站通道適配器

所以這需要作業名稱可供FTP過濾器使用。有沒有辦法將其傳遞給過濾器?還有一種方法可以將jobname作爲頭添加到由ftp適配器發出的消息中?

<int-ftp:inbound-channel-adapter 
    local-directory="${data.dir}" session-factory="ftpClientFactory" 
    channel="ftpOutputChannel" remote-directory="${ftp.data.directory}" 
    filter="ftpFilter"> 
    <int:poller fixed-rate="50000" /> 
    <!--This will be replaced by a trigger job --> 
</int-ftp:inbound-channel-adapter> 

<beans:bean class="com.example.ftp.FtpFilter" 
    id="ftpFilter"></beans:bean> 

com.example.ftp.FtpFilter

public class FtpFilter implements FileListFilter<FTPFile> { 

    public List<FTPFile> filterFiles(FTPFile[] files) { 
     String validRegex = FileFilterStrategy.getValidTarGzRegex(); 
     for (FTPFile file : files) { 
      String name = file.getName(); 
      if(name.matches(validRegex) && !isProcessed(jobName, name)){ 
       retval.add(file); 
      } 
     } 
     return retval ; 
    } 
} 

回答

0

是,剛剛獲得的過濾器的引用,並改變它的一些特性。

目前沒有辦法以您描述的方式修改標題;你可以在過濾器中使用ThreadLocal玩一些技巧。

但是,對於這些「事件驅動」場景,我通常建議使用outbound gateway來獲取文件而不是入站通道適配器。

它給你更多的控制 - 你可以get(或mget)的模式,或ls遠程目錄和自己決定哪些文件(縣)get

另請參閱ftp gateway sample app,其中使用ls,getrm網關。

+0

但是過濾器在不同的作業之間共享,所以設置屬性不是一個選項。順便說一句ls/mget如何給予更多的控制......我們可以列出一個目錄並決定使用過濾器獲得哪些文件,就像問題一樣?雖然會看到出站網關並恢復。 – 2014-09-05 19:01:59

+0

是的,你是絕對正確的,最終使用出站網關和ThreadLocal訪問ftpFilter中的作業屬性。 – 2014-09-17 12:58:23

+0

@加里,多虧了關注,如何替換現有的文件? – 2015-04-21 09:55:47

相關問題