Весенняя интеграция, удалить файл в исходящем адаптере канала
-
13-12-2019 - |
Вопрос
Я использую Spring Integration, чтобы опросить каталог для файла, обрабатывать этот файл в классе обслуживания, напишите этот файл в каталог выходных данных, а затем удалите исходный файл.
У меня есть следующая конфигурация 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"/>
.
Это опросы файла, передает его на мою обработку_сервис и копирует его в исходящий каталог.Однако исходный файл не удаляется.У кого-нибудь есть идея о том, почему нет?
Решение
Я знаю, что вопрос был задан давным-давно, но, возможно, ответ будет полезен для кого-то другого.
Причина, по которой входной файл не удален, предоставляется в Справка пружины интеграции :
Атрибут
delete-source-files
будет иметь только эффект, если Входящее сообщение имеет полезную нагрузку или еслиFileHeaders.ORIGINAL_FILE
Значение заголовка содержит либо экземпляр исходного файла или строку Представление исходного пути файла.
Ваше сообщение не содержит этого конкретного заголовка. Если вы используете один из одной из Стандартный файл Трансформаторы (FileToStringTransformer
и FileToByteArrayTransformer
) он будет установлен автоматически. В качестве альтернативы вы можете установить его вручную, используя Заголовок ряд .
за кулисами что-то вроде этого происходит в файловых трансформаторах:
...
Message<?> transformedMessage = MessageBuilder.withPayload(result)
.copyHeaders(message.getHeaders())
.setHeaderIfAbsent(FileHeaders.ORIGINAL_FILE, file)
.setHeaderIfAbsent(FileHeaders.FILENAME, file.getName())
.build();
...
. Другие советы
из документации http://static.springsource.org/spring-интеграция / ссылка / HTML / FileS.html
<int-file:outbound-gateway id="mover" request-channel="moveInput"
reply-channel="output"
directory="${output.directory}"
mode="REPLACE" delete-source-files="true"/>
.
Я не знаю, как это сделать на входящем канале-адаптере (который, я думаю, имеет смысл)