我已经定义了一个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 ;
}
}
答案 0 :(得分:0)
是的,只需获取对过滤器的引用并更改其上的某些属性。
目前无法以您描述的方式修改标题;你可以使用ThreadLocal
在过滤器中玩一些技巧。
但是,对于这些“事件驱动”方案,我通常建议使用outbound gateway来获取文件而不是入站通道适配器。
它为您提供了更多控制权 - 您可以get
(或mget
)模式,或ls
远程目录,并自行决定将哪些文件发送到{{1} }。
另请参阅使用get
,ls
和get
网关的ftp gateway sample app。