Question

J'utilise Spring Integration pour interroger un répertoire pour un fichier, traiter ce fichier dans une classe de service, écrire ce fichier dans un répertoire de sortie, puis supprimer le fichier d'origine.

J'ai la configuration XML suivante :

  <int-file:inbound-channel-adapter id="filesInChannel"
                                    directory="file:${java.io.tmpdir}/input" 
                                    auto-create-directory="true"  >
      <int:poller id="poller" fixed-delay="1000" />
  </int-file:inbound-channel-adapter>

  <int:service-activator id="servicActivator"
                         input-channel="filesInChannel"
                         output-channel="filesOut"
                         ref="my_file_processing_service">
  </int:service-activator>

  <int-file:outbound-channel-adapter  id="filesOut" auto-create-directory="true" delete-source-files="true" directory="file:${java.io.tmpdir}/output"/>

Cela interroge le fichier, le transmet à mon service_traitement et le copie dans le répertoire sortant.Cependant, le fichier d'origine n'est pas supprimé.Quelqu'un a-t-il une idée de pourquoi pas ?

Était-ce utile?

La solution

Je sais que la question a été posée il y a longtemps mais peut-être que la réponse sera utile à quelqu'un d'autre.

La raison pour laquelle le fichier d'entrée n'est pas supprimé est indiquée dans le Référence d'intégration Spring:

Le delete-source-files L'attribut n'aura un effet que si le message entrant a une charge utile de fichier ou si le FileHeaders.ORIGINAL_FILELa valeur d'en-tête contient soit l'instance de fichier source ou une chaîne représentant le chemin d'origine du fichier.

Votre message ne contient pas cet en-tête particulier.Si vous utilisez l'un des transformateurs de fichiers standard (FileToStringTransformer et FileToByteArrayTransformer) il sera réglé automatiquement.Vous pouvez également le définir manuellement à l'aide d'un enrichisseur d'en-tête.

Dans les coulisses quelque chose comme ceci se produit dans les transformateurs de fichiers :

...
Message<?> transformedMessage = MessageBuilder.withPayload(result)
        .copyHeaders(message.getHeaders())
        .setHeaderIfAbsent(FileHeaders.ORIGINAL_FILE, file)
        .setHeaderIfAbsent(FileHeaders.FILENAME, file.getName())
        .build();
...

Autres conseils

de la documentation http://static.springsource.org/spring-Integration / référence / html / fichiers.html

<int-file:outbound-gateway id="mover" request-channel="moveInput"
reply-channel="output"
directory="${output.directory}"
mode="REPLACE" delete-source-files="true"/>

Je ne sais pas comment faire cela sur l'adaptateur de canal entrant (que je pense est logique)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top