2

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 に渡され、outbound ディレクトリにコピーされます。ただし、元のファイルは削除されていません。誰もが理由について何か考えがありますか?

4

2 に答える 2

2

この質問はずっと前に尋ねられたことを知っていますが、その答えは他の誰かに役立つかもしれません。

入力ファイルが削除されない理由は、Spring Integration Referenceに記載されています。

この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();
...
于 2013-11-18T11:00:33.830 に答える
0

ドキュメントhttp://static.springsource.org/spring-integration/reference/html/files.htmlから

<int-file:outbound-gateway id="mover" request-channel="moveInput"
reply-channel="output"
directory="${output.directory}"
mode="REPLACE" delete-source-files="true"/>

inbound-channel-adapter でこれを行う方法がわかりません (これは理にかなっていると思います)

于 2013-03-03T05:13:07.023 に答える