2017-03-24 27 views
0

私はここで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エンドポイント経由)

答えて

1

FileWritingMessageHandler<int-file:outbound-channel-adapter>)がそれを実行できます。したがって、RESTエンドポイントはファイル名を取得し、DB内の状態をチェックします。 <filter>経由でのペイロードとFiles.move()<int-file:outbound-channel-adapter>に移動します。

+0

ありがとうございましたArtem!私はそれを試して、報告してみましょう – ochi

+0

私はこの時点で正しい質問があると仮定します: 'outbound-channel-adapter'に送信するためのペイロードに(ファイル名から)ファイルをロードする正しい方法は何ですか? - 新しいファイル( "path/to/file/filename")を実行していますか? – ochi

+0

はい、そうです。 'Files.move()'を実行するには、実際に 'File'ペイロードを提供する必要があります。あなたはすでにその道を持っているので、それはあなたのための簡単な「変圧器」でなければなりません。注意: 'File'オブジェクトを作成すると、その内容をメモリにロードしません。そのため、Javaメモリに影響を与えずに、OS固有のユーティリティである 'move'を使用しています。 –

関連する問題