2016-09-22 2 views
0

일부 레코드가 포함 된 하나의 파일이 있는데 두 번째 파일에도 동일한 레코드가 있지만 자세한 내용이 포함되어 있으므로 첫 번째 파일에서 한 레코드를 읽는 방식으로 처리하고 싶습니다 초. 두 파일을 동시에 읽는 방법은 무엇입니까?스프링에서 프로세스 병렬 다중 읽기 통합

업데이트 :

우리가 첫 번째 파일을 읽고 다음 나는 두 번째 파일 디렉토리에서 읽을 것을 의미 읽기 로직을 ​​작성해야하는 위치 알고 싶어 있도록 채널을 실행자에 전송을 분할 여기에 첫 번째 줄에
return IntegrationFlows.from(readFilefromDirectory(), fileInboundPollingConsumer()) 
        .split(fileSplitter()) 
       .channel(c ->c.executor(id, executor)) 

및 해당 엑셀 파일에서 레코드를 검색하십시오.

답변

1

스프링 통합의 모든 병렬 작업은 ExecutorChannel을 통해 수행 할 수 있습니다.

첫 번째 파일에는 FileSplitter을, 출력에는 ExecutorChannel을 사용하는 것이 좋습니다.

두 번째 파일은 ... 글쎄, 한 번 메모리에 읽어 들였습니다. record과 그 사이의 구분 기호가 details 인 경우 Map으로 그리고 들어오는 레코드에 해당 메모리 저장소를 사용하십시오.

UPDATE

두 번째 파일이 매우 큰 경우, 다음과 같이 할 수 있습니다 (

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

업데이트 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 백만 레코드) 메모리에 넣는 것이 좋을까요? –

+0

내 대답은 업데이트를 참조하십시오. –

+0

executer 채널에서 두 번째 파일을 읽는 로직을 어디에 써야합니까? –

관련 문제