Spring Integration, Datei im Outbound-Channel-Adapter löschen
-
13-12-2019 - |
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?
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 dieFileHeaders.ORIGINAL_FILE
Der 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)