Integrazione a molla, Elimina file in Adattatore canale in uscita
-
13-12-2019 - |
Domanda
Sto usando l'integrazione a molla per poll a una directory per un file, elabora questo file in una classe di servizio, scrivi questo file in una directory di uscita e quindi eliminare il file originale.
Ho la seguente configurazione XML:
<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"/>
.
Questo sondaggi Il file, lo passa al mio trattamento Elaboration_service e lo copia nella directory in uscita.Tuttavia il file originale non viene eliminato.Qualcuno ha idea del perché no?
Soluzione
So che la domanda è stata posta molto tempo fa, ma forse la risposta sarà utile per qualcun altro.
Il motivo per cui il file di input non viene eliminato è fornito nel Riferimento di integrazione della molla :
.L'attributo
delete-source-files
avrà un effetto solo se il Il messaggio in entrata ha un file payload del file o se ilFileHeaders.ORIGINAL_FILE
Il valore di intestazione contiene l'istanza del file di origine o una stringa Rappresentando il percorso del file originale.
Il tuo messaggio non contiene questa particolare intestazione. Se si utilizza uno dei file standard Trasformatori (FileToStringTransformer
e FileToByteArrayTransformer
) Sarà impostato automaticamente. In alternativa puoi impostarlo manualmente utilizzando un Intestazione Enricher .
Dietro le quinte qualcosa come questo sta accadendo nei trasformatori di file:
...
Message<?> transformedMessage = MessageBuilder.withPayload(result)
.copyHeaders(message.getHeaders())
.setHeaderIfAbsent(FileHeaders.ORIGINAL_FILE, file)
.setHeaderIfAbsent(FileHeaders.FILENAME, file.getName())
.build();
...
. Altri suggerimenti
Dalla documentazione http://static.springsource.org/spring-integrazione / riferimento / html / file.html
<int-file:outbound-gateway id="mover" request-channel="moveInput"
reply-channel="output"
directory="${output.directory}"
mode="REPLACE" delete-source-files="true"/>
.
Non so come farlo sull'adattatore a canale in entrata (che penso abbia senso)