質問

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がある場合 ヘッダ値には、ソースファイルインスタンスまたは文字列が含まれています 元のファイルパスを表現します。

あなたのメッセージにこの特定のヘッダーが含まれていません。 標準ファイルのいずれかを使用する場合トランスフォーマーFileToStringTransformerFileToByteArrayTransformer)は自動的に設定されます。あるいは、

シーンの後ろにこのようなものはファイルトランスフォーマーで起こっています:

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

インバウンドチャネルアダプタ(私は理にかなっていると思います)でこれを行う方法がわかりません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top