Frage

Ich verwende Spring Integration, um ein Verzeichnis nach einer Datei abzufragen, diese Datei in einer Serviceklasse zu verarbeiten, diese Datei in ein Ausgabeverzeichnis zu schreiben und dann die Originaldatei zu löschen.

Ich habe die folgende XML-Konfiguration:

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

Dadurch wird die Datei abgefragt, an meinen processing_service übergeben und in das Ausgangsverzeichnis kopiert.Die Originaldatei wird jedoch nicht gelöscht.Hat jemand eine Idee, warum nicht?

War es hilfreich?

Lösung

Ich weiß, dass die Frage schon vor langer Zeit gestellt wurde, aber vielleicht ist die Antwort für jemand anderen nützlich.

Der Grund, warum die Eingabedatei nicht gelöscht wird, ist im angegeben Referenz zur Spring-Integration:

Der delete-source-files Das Attribut hat nur einen Effekt, wenn die eingehende Nachricht eine Dateinutzlast hat oder ob die FileHeaders.ORIGINAL_FILEDer Header -Wert enthält entweder die Quelldateiinstanz oder eine Zeichenfolge, die den Original -Dateipfad darstellt.

Ihre Nachricht enthält diesen speziellen Header nicht.Wenn Sie eines der verwenden Standard-Dateitransformatoren (FileToStringTransformer Und FileToByteArrayTransformer) wird es automatisch eingestellt.Alternativ können Sie es auch manuell über a einstellen Header-Anreicherer.

Hinter den Kulissen So etwas passiert in den Dateitransformatoren:

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

Andere Tipps

aus der Dokumentation http://static.springsource.org/spring-Integration / referenz / html / files.html

generasacodicetagpre.

Ich weiß nicht, wie ich das auf dem Inbound-Channel-Adapter tun soll (was ich denke, sinnvoll)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top