私はここでSpring Integrationを使用しています。所定のディレクトリからファイルをコピーする方法(ファイル名で)
ファイルが別のサービスアクティベータによってコピーされているディレクトリがあります。
DB上のステータスがprocessed
になるまで、ファイルをそこに置く必要があります。ファイルを最終宛先に(SFTP経由で)送信される次のディレクトリに移動する必要があります。
私はprocessed
ステータス(DBから)のファイルのリストを取得するポーリングチャネルを持っています。それから私は、私が唯一の指定されたファイルを読むためにinbound-channel-adapter
を教えてください(私はフルを持ってどのように入ってくるリスト(各Message
は今、私はそので次のディレクトリに移動する必要があるファイルの名前が含まれています。)
を分割しましたファイルへのパス)を定義したディレクトリからコピーし、それを次のディレクトリに移動しますか?
これは、これまでのところ、私の設定です:
<!-- File Adapters: Inbound -->
<file:inbound-channel-adapter
id="filesInChannelAdapter"
filename-regex="/^#jsonPath(payload,'$.filename')$/" <<< this does not work
directory="${inbound.dir}" />
<!-- Service Activators -->
<int:service-activator input-channel="filesInChannelAdapter"
output-channel="filesOutChannelAdapter"
id="fileCopyActivator"
method="handleFile"
ref="fileCopyHandler"/>
<!-- File Adapters: Outbound -->
<file:outbound-channel-adapter
id="filesOutChannelAdapter"
preserve-timestamp="true"
delete-source-files="true"
directory="${outbound.dir}"/>
は、ディレクトリをポーリングすることなく、ファイルを読み込む方法はありますか?
DBからステータスを照会した後、ディレクトリAからファイルBにファイルをコピーする方法は他にありますか? (RESTエンドポイント経由)
ありがとうございましたArtem!私はそれを試して、報告してみましょう – ochi
私はこの時点で正しい質問があると仮定します: 'outbound-channel-adapter'に送信するためのペイロードに(ファイル名から)ファイルをロードする正しい方法は何ですか? - 新しいファイル( "path/to/file/filename")を実行していますか? – ochi
はい、そうです。 'Files.move()'を実行するには、実際に 'File'ペイロードを提供する必要があります。あなたはすでにその道を持っているので、それはあなたのための簡単な「変圧器」でなければなりません。注意: 'File'オブジェクトを作成すると、その内容をメモリにロードしません。そのため、Javaメモリに影響を与えずに、OS固有のユーティリティである 'move'を使用しています。 –