2017-10-03 4 views
0

Bekam einige Probleme mit Dateiadapter in Spring Integration und habe keine Ahnung, wie ich noch nie zuvor davon gehört habe. Verwenden Sie den folgenden Code, um eine Datei aus dem FTP-Ordner zu lesen und in das lokale Verzeichnis zu schreiben.Spring Integration - Datei Adapter funktioniert nicht nach dem ersten Versuch

Problem ist, nachdem der Server gestartet wird, funktioniert es zum ersten Mal. Aber die nachfolgenden Aufrufe rufen den Dateiadapter auf, aber der Dateiverschiebungsprozess findet nicht statt.

Cron Timing ist: 0/20 * * * *?.

Irgendeine Idee über dieses seltsame Verhalten?

<int:channel id="txtFilesIn"> 
     <int:dispatcher task-executor="executor"/> 
    </int:channel> 
    <int:channel id="txtFilesOut"> 
     <int:dispatcher task-executor="executor"/> 
    </int:channel> 

    <int-file:inbound-channel-adapter id="txtFilesIn" 
     directory="${FILE_IN}" 
     filename-pattern="*.csv" 
     auto-startup="true"> 
     <int:poller cron="${CRON_TAB}" ></int:poller> 
    </int-file:inbound-channel-adapter> 

    <int:service-activator input-channel="txtFilesIn" 
          output-channel="txtFilesOut" 
          ref="apiCommonService" 
          method="readFile"/> 

    <int-file:outbound-channel-adapter id="txtFilesOut" 
     directory="${FILE_OUT}" 
     delete-source-files="true"/> 

EDIT 1:

wie diese modifizierte

<int-file:inbound-channel-adapter id="txtFilesIn" 
     directory="${FILE_IN}"    
     auto-startup="true" 
    local-filter="acceptAll"> 
     <int:poller cron="${CRON_TAB}" ></int:poller> 
    </int-file:inbound-channel-adapter> 

<bean id="acceptAll" class="org.springframework.integration.file.filters.AcceptAllFileListFilter" /> 

Es arbeitet jetzt in Ordnung.

Antwort

1

Ziel <int-file:inbound-channel-adapter>:

A FileReadingMessageSource verwendet werden können Dateien aus dem Dateisystem zu konsumieren. Dies ist eine Implementierung von MessageSource, die Nachrichten aus einem Dateisystemverzeichnis erstellt.

Um das Erstellen von Nachrichten für bestimmte Dateien zu verhindern, können Sie eine FileListFilter angeben. Standardmäßig werden die folgenden zwei Filter verwendet:

  • IgnoreHiddenFileListFilter
  • AcceptOnceFileListFilter

Also, das stimmt, dass es Dateien aus der ersten Zeit aufgreift, aber es tut nichts tun, jede Folgezeiten, wenn keine neuen Dateien zum Filter passen.

+0

Der Dateiadapter wird einmal alle 10 Minuten ausgeführt und ich habe gerade eine Datei erneut in den IN-Ordner gestellt. Das sollte funktionieren, und deshalb ist die Abstimmung da, IIRC! Aber es passiert nicht und ich weiß nicht warum! – Rajkumar

+0

'Ich habe gerade eine Datei neu platziert. Das ist ein wichtiger Teil (!!!). Siehe 'AcceptOnceFileListFilter'. Es ist nicht möglich, dieselbe Datei erneut zu verarbeiten. Die Filterlogik basiert auf dem Dateinamen. Also, du musst die Datei unter einem anderen Namen ablegen oder dieses 'AcceptOnceFileListFilter' von der' 'deaktivieren, soweit ich sehe, benutze' delete-source-files = "true" 'on die ausgehende Seite. –

+0

Modifizierte den Code mit acceptAllFilter und es funktioniert gut. Danke für die Hilfe. – Rajkumar

Verwandte Themen