2014-09-05 4 views
2

Я определил 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 ; 
    } 
} 

ответ

0

Да, просто получить ссылку на фильтр и изменить некоторые свойства на нем.

В настоящее время нет способа изменить заголовки таким образом, как вы описываете; вы можете сыграть некоторые трюки в фильтре, используя ThreadLocal.

Однако для этих сценариев, управляемых событиями, я обычно рекомендую использовать outbound gateway для извлечения файлов, а не адаптера входящего канала.

Это дает гораздо больший контроль - вы можете get (или mget) образец, или ls удаленный каталог и самостоятельно решать, какой файл (ы) для get.

Также см. ftp gateway sample app, который использует ls, get и rm шлюзы.

+0

Но фильтр разделяется между разными заданиями, поэтому настройка свойства не является опцией. Btw, как ls/mget дает больше контроля ... мы можем перечислить каталог и решить, какие файлы получить с помощью фильтра тоже, как в вопросе? Посмотрите на исходящий шлюз и вернитесь назад. –

+0

Да, вы абсолютно правы, в конечном итоге использовали исходящий шлюз и ThreadLocal для доступа к свойству job в ftpFilter. –

+0

@Gary, благодаря вниманию, как заменить существующий файл? –

Смежные вопросы