Spring Integration、アウトバウンドチャネルアダプタのファイルを削除します
-
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"/>
.
これはファイルをポーリングし、それをMy Processing_Serviceに渡し、それをアウトバウンドディレクトリにコピーします。ただし、元のファイルは削除されていません。誰かがなぜそうではないのかについては誰もがいますか?
解決
私は私は質問がずっと前に尋ねられたことを知っていますが、答えは他の誰かに役立つでしょう。
入力ファイルが削除されていない理由は、 SPLY統合リファレンス
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 - integration / inference / html / files.html
<int-file:outbound-gateway id="mover" request-channel="moveInput"
reply-channel="output"
directory="${output.directory}"
mode="REPLACE" delete-source-files="true"/>
.
インバウンドチャネルアダプタ(私は理にかなっていると思います)でこれを行う方法がわかりません