2017-10-03 1 views
0

J'ai rencontré des problèmes avec l'adaptateur de fichiers dans Spring Integration et je n'ai aucune idée car je n'en avais jamais entendu parler auparavant. En utilisant le code ci-dessous pour lire un fichier du dossier FTP et l'écrire dans le répertoire local.Spring Integration - L'adaptateur de fichiers ne fonctionne pas après la première tentative

Le problème est après que le serveur est démarré, il fonctionne très bien pour la première fois. Mais les invocations suivantes invoquent l'adaptateur de fichier mais le processus de déplacement de fichier ne se produit pas.

Cron Le timing est: 0/20 * * * *.

Une idée de ce comportement étrange?

<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:

modifié comme celui-ci

<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" /> 

Il fonctionne bien maintenant.

Répondre

1

L'objectif de <int-file:inbound-channel-adapter>:

A FileReadingMessageSource peut être utilisé pour consommer les fichiers du système de fichiers . Il s'agit d'une implémentation de MessageSource qui crée des messages à partir d'un répertoire de système de fichiers.

Pour éviter de créer des messages pour certains fichiers, vous pouvez fournir un FileListFilter. Par défaut, les 2 filtres suivants sont utilisés:

  • IgnoreHiddenFileListFilter
  • AcceptOnceFileListFilter

Donc, c'est exact qu'il ramasse les fichiers de la première fois, mais il ne fait rien tout par la suite s'il n'y a pas de nouveaux fichiers correspondant au filtre.

+0

L'adaptateur de fichier s'exécute une fois toutes les 10 minutes et je viens de placer à nouveau un fichier dans le dossier IN. Cela devrait fonctionner, et c'est pourquoi le sondage est là, IIRC! Mais ça n'arrive pas et je ne sais pas pourquoi! – Rajkumar

+0

'Je viens de replacer un fichier'. C'est une partie importante (!!!). Voir 'AcceptOnceFileListFilter'. Il ne permet pas de traiter le même fichier à nouveau. La logique de filtrage est basée sur le nom du fichier. Donc, vous devez placer un fichier avec un nom différent ou désactiver ce 'AcceptOnceFileListFilter' depuis le' '' pour autant que je vois que vous utilisez 'delete-source-files =" true "' on le côté sortant. –

+0

Modification du code avec acceptAllFilter et fonctionne correctement. Merci pour l'aide. – Rajkumar