2016-09-22 5 views
0

私はいくつかのレコードを含む1つのファイルを持っていますが、同じレコードが含まれているが、より詳細な第2のファイルを持っているので、最初のファイルから1レコードを読み込み、秒です。 2つのファイルを並行して読み込む方法は?春のプロセス並列複数読み取り統合

更新:

return IntegrationFlows.from(readFilefromDirectory(), fileInboundPollingConsumer()) 
        .split(fileSplitter()) 
       .channel(c ->c.executor(id, executor)) 

ここで最初の行に、我々は最初のファイルを読み込み、その後、私は第二のファイルを読むためにロジックを記述すべきであることは、ディレクトリから読み取ることが意味するかを知りたいので、チャンネルを実行者への送信、それを分割されており、そのExcelファイルを検索してください。

答えて

1

Spring統合のすべての並行作業は、ExecutorChannelで行うことができます。

最初のファイルにはFileSplitter、出力にはExecutorChannelを使用することをお勧めします。

2番目のファイルについては...まあ、私はそれを一度メモリに読み込みます。 recordとそのdetailsの間にある区切り文字がある場合はMapとなります。そして、そのメモリストアを受信レコード用に使用します。

UPDATE

第二のファイルが非常に大きい場合は、次のように行うことができます(

Scanner scanner=new Scanner(file); 
while(scanner.hasNextLine()) { 
    String line = scanner.nextLine(); 
    if(line.startsWith(payload)) { 
     return line; 
     } 
} 

UPDATE 2

searchServiceは、いくつかのサービス @Beanある
return IntegrationFlows.from(readFilefromDirectory(), fileInboundPollingConsumer()) 
      .split(fileSplitter()) 
      .channel(c ->c.executor(id, executor)) 
      .handle("searchService", "searchMethod") 

または単に@Service)およびsearchMethodはロジックを利用してString lineを受け入れ、他のファイルで検索を実行するロジックを実装します。その検索操作は、分割されたようなものごとに並行して行われます。

Excelファイルを読み込むロジックがSpringの統合スコープ外です。それはまったく異なる質問です。

+0

しかし、2番目のファイルが大きければ(2百万レコード)、それをメモリに入れるとよいでしょうか? –

+0

私の答えは更新を見てください。 –

+0

executerチャネルで2番目のファイルを読み込むロジックをどこに書くべきですか? –

関連する問題