2014-09-05 90 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

相关问题