2013-10-15 2 views
0

프로덕션 릴리스 마지막 순간에 Java Spring Batch에서 이상한 문제가 발견되었습니다. 무한 루프가됩니다. 여기 스프링 배치 작업 무한 루프

는 광산의 설정입니다 :

<batch:job id="dbasJob" restartable="true">  
    <batch:step id="dbasStep" next="webService">   
     <tasklet>    
      <chunk reader="campaignReader" processor="campaignProcessor" writer="campaignWriter" commit-interval="1" 
       skip-limit="50"> 

       <skippable-exception-classes> 
        <include class="java.lang.Exception" /> 
       </skippable-exception-classes> 

       <listeners> 
        <listener ref="campaignProcessListener" /> 
        <listener ref="campaignSkipListener" /> 
       </listeners> 
      </chunk>   
     </tasklet> 
     <batch:listeners> 
      <batch:listener ref="promotionListener" /> 
     </batch:listeners>  
    </batch:step> 

기록의 총 수는 10. 그래서 모든 단일 레코드가 처리 된 후 발생 커밋이다. 결과를 Writer의 데이터베이스에 씁니다.

독자가 DB에서 처리하고 쓰는 중 하나씩 항목을 가져옵니다.

public Campaign read() 
{ 
    return campaignList.isEmpty() ? null : campaignList.remove(0); 
} 

public Campaign process(Campaign campaign) throws UnexpectedInputException, ParseException, Exception { 

    try 

public void write(List<? extends Campaign> campaignList) throws Exception 
{//...Writing to DB... 

테이블을 계속 실행하고 데이터를 무한히 삽입합니다.

관찰 : 커밋 간격 < 총 레코드 및 건너 뛰기 제한> 커밋 간격.

누군가가 몇 가지 해결책/해결 방법을 제안하면이 문제로 인해 제작 릴리스가 개최되는 시점에 나에게 큰 도움이 될 것입니다.

고마워요. 그것을 위해 개방 문제, 우리가이 문제를 재현 할 수 없었던 것을 알 수가 있지만

답변

1

이 문제

+0

에 대한 open ticket 있습니다. 테스트 케이스에 기여할 수 있다면 테스트 케이스를 수정하는 데 많은 도움이됩니다. –

+0

답장을 보내 주셔서 감사합니다. 나는이 무한 루프 문제에 대한 공개 티켓을 보았지만 실제로는 Skip 제한이 커밋 제한보다 큽니다. 필자는 목록에 데이터를 채웠다. 목록이 완전히 고갈되지 않기 때문에 무한 루프로 진행되는 이유였습니다. 이제 문제를 해결했습니다. 그러나이 티켓에 대해 아직 확실하지 않습니다. 감사. – Vimal

+0

오류가 발생했지만 성공하지 못했습니다. –