2013-03-07 2 views
0

플랫 파일을 읽으려면 스프링 배치를 사용하고 있습니다. 파일에는 관련 레코드가 있습니다. 즉, 부모 레코드와 모든 레코드를 읽고 저장하기 위해 웹 서비스에 전화하기를 원하는 수의 자식 레코드가있을 수 있습니다. 나는 또한 관계를 포착하고 그것을 저장하고 싶었습니다. 하나의 도전은 자식 레코드가 파일의 어느 곳에 나있을 수 있습니다. 그리고 어린이는 또한 많은 어린이 기록을 가질 수 있습니다. 나는 스프링 배치로이 문제에 대한 해결책을 찾을 수 없습니다. 제안 사항을 입력하십시오.관련 파일이있는 파일 일괄 읽기

업데이트 : 데이터 임시 저장 공간으로 데이터베이스를 사용할 수있는 옵션이 없습니다.

답변

0

파일을 여러 번 처리하여 이러한 문제를 해결했습니다. 내가 읽은하려고합니다 모든 패스에

\ 과정 등 ALG으로 파일의 모든 레코드 : 기록이 부모가있는 경우

  • 은 - 부모가 이미 저장되어 있는지 확인하세요. : 나는 프로세서를 건너
  • 변경 레코드 (업데이트가 가능하지 않은 경우 이미 또는 저장)하는 경우
  • - - 경우 어떤 DB

에 가게를 그리고 루프 결정자를 선언 -

  • 다른 프로세서를 건너

    <batch:step id="processParentAndChilds" next="loop"> 
         <batch:tasklet> 
          <batch:chunk reader="processParentAndChildsReader" 
             commit-interval="1000"> 
           <batch:processor> 
            <bean class="processParentAndChildsProcessor"/> 
           </batch:processor> 
           <batch:writer> 
            <bean class="processParentAndChildsWriter"/> 
           </batch:writer> 
          </batch:chunk> 
         </batch:tasklet> 
        </batch:step> 
        <batch:decision decider="processParentAndChildsRetryDecider" id="loop"> 
         <batch:next on="NEXT_LEVEL" to="processprocessParentAndChilds"/> 
         <batch:next on="COMPLETED" to="goToNextSteps"/> 
        </batch:decision> 
    
    
    public class ProcessParentAndChildsRetryDecider implements JobExecutionDecider{ 
    @Override 
    public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { 
        // if no on record written - no sense to try again 
        if (stepExecution.getWriteCount() > 0) { 
         return new FlowExecutionStatus("NEXT_LEVEL"); 
        } else { 
         return FlowExecutionStatus.COMPLETED; 
        } 
    } 
    

    }

  • +0

    감사 미하일. 나는 다른 접근법을 사용했다. 파일을 반복하고 메모리 맵을 작성하는 단계가 있습니다 (독자는 파일을 읽고 프로세서는 맵을 작성합니다. 작성자는 아무 작업도하지 않는 작가입니다). 이 컨텍스트를 저장하고 다음 단계에서지도를 읽고 도메인 개체와 필요한 관계를 만듭니다. 파일이 거대한 경우 메모리 누수가 발생합니다.이 처리 및 메모리 문제를 해결하기 위해 더 많은 메모리를 구입할 수 있습니다. 나는 여러 번 파일을 처리하지 않아야합니다. 어쨌든 고마워. –

    관련 문제