2016-09-22 3 views
0

Ich habe eine Datei, die einige Datensätze enthält und ich habe zweite Datei, die auch den gleichen Datensatz, aber mit mehr Details enthält, so möchte ich auf eine Weise verarbeiten, die einen Datensatz aus der ersten Datei und suchen in zweiter. Wie liest man zwei Dateien parallel?Prozess parallel mehrere lesen im Frühjahr Integration

Update:

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

hier in erster Linie wir erste Datei lesen und Aufspalten es dann Sendekanal executer so dass ich wissen will, wo soll ich Logik schreibe zweite Datei zu lesen bedeutet, aus dem Verzeichnis zu lesen und Suchen Sie dann den Datensatz in dieser Excel-Datei.

Antwort

1

Die gesamte parallele Arbeit in Spring Integration kann über ExecutorChannel erfolgen.

Ich würde vorschlagen, FileSplitter für die erste Datei und eine ExecutorChannel als Ausgabe zu verwenden.

Wie für die zweite Datei ... Nun, ich würde es einmal in den Speicher z. als Map wenn Sie ein Trennzeichen zwischen record und details haben. Und diesen Speicher für eingehenden Datensatz verwenden.

UPDATE

Wenn die zweite Datei sehr groß ist, können Sie wie folgt tun:

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

UPDATE 2

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

wo searchService einige Service ist @Bean (oder einfach @Service) und searchMethod verwenden Logik, um die String line zu akzeptieren und Logik zu implementieren, um die Suche in anderer Datei durchzuführen. Diese Suchoperation wird parallel für jede Art von Teilen durchgeführt.

Die Logik zum Lesen der Excel-Datei liegt außerhalb des Bereichs der Spring Integration. Das ist eine ganz andere Frage.

+0

Aber wenn zweite Datei groß ist (2 Millionen Datensätze) wird es gut sein, in den Speicher zu legen? –

+0

Siehe ein Update in meiner Antwort. –

+0

Wo sollte ich Logik schreiben, um die zweite Datei im Executer-Kanal zu lesen? –

Verwandte Themen