簡體   English   中英

將作業參數傳遞給spring集成ftp中的過濾器:inbound-channel-adapter

[英]Pass job parameters to filter in spring integration ftp:inbound-channel-adapter

我已經定義了一個ftp:inbound-channel-adapter,它將由一個作業和一個自定義過濾器觸發,該過濾器將檢查文件名是否匹配某個模式,以及是否之前未對該特定作業進行處理。

因此,這要求作業名稱可用於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 ;
    }
}

是的,只需獲取過濾器的引用並更改其屬性即可。

當前無法按照您描述的方式修改標題; 您可以使用ThreadLocal在過濾器中玩一些技巧。

但是,對於這些“事件驅動”方案,我通常建議使用出站網關而不是入站通道適配器來獲取文件。

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

另請參閱使用lsgetrm網關的ftp網關示例應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM