Я определил ftp: входящий канал-адаптер, который будет запускаться заданием и настраиваемым фильтром, который проверяет, соответствует ли имя файла шаблону, а также если он не обрабатывался раньше для конкретной работы.Передать параметры задания для фильтрации при интеграции с весной ftp: входящий канал-адаптер
Для этого требуется, чтобы имя задания было доступно для фильтра FTP. Есть ли способ, с помощью которого это можно передать фильтру? Также есть способ добавить имя задания в виде заголовка к сообщениям, испускаемым адаптером 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 ;
}
}
Но фильтр разделяется между разными заданиями, поэтому настройка свойства не является опцией. Btw, как ls/mget дает больше контроля ... мы можем перечислить каталог и решить, какие файлы получить с помощью фильтра тоже, как в вопросе? Посмотрите на исходящий шлюз и вернитесь назад. –
Да, вы абсолютно правы, в конечном итоге использовали исходящий шлюз и ThreadLocal для доступа к свойству job в ftpFilter. –
@Gary, благодаря вниманию, как заменить существующий файл? –