传递作业参数以在spring集成中过滤ftp:inbound-channel-adapter

时间:2014-09-05 10:28:27

标签: java spring ftp spring-batch spring-integration

我已经定义了一个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 ;
    }
}

1 个答案:

答案 0 :(得分:0)

是的,只需获取对过滤器的引用并更改其上的某些属性。

目前无法以您描述的方式修改标题;你可以使用ThreadLocal在过滤器中玩一些技巧。

但是,对于这些“事件驱动”方案,我通常建议使用outbound gateway来获取文件而不是入站通道适配器。

它为您提供了更多控制权 - 您可以get(或mget)模式,或ls远程目录,并自行决定将哪些文件发送到{{1} }。

另请参阅使用getlsget网关的ftp gateway sample app