목차

재시도(Retry) 예제

개요

배치 수행 시, 데이터를 처리하는 과정에서 실패한 데이터처리를 재시도하는 과정을 보여주는 예제이다. EgovRetrySampleFunctionalTests 예제는 ItemProcessing, ItemWriting 에서 발생한 예외상황에 대해 정해진 설정대로 Retry를 수행하는 과정을 보여준다. 설정된 retry-limit 만큼 재시도를 허용함으로써 Job 전체의 실패를 줄일 수 있다.

설명

설정

Job 설정

재시도(Retry) 예제의 Job 설정 파일인 retrySample.xml을 확인한다.

Job 의 구성을 보면 Chunk 설정에 아래와 같은 설정이 있다.

  <include> : retry 해야하는 Exception 지정
  <exlclude> : include로 지정한 exception의 하위 exception 중, retry 하지 않을 Exception 지정
<job id="retrySample" xmlns="http://www.springframework.org/schema/batch">
	<step id="step1">
		<tasklet>
			<chunk reader="itemGenerator" writer="itemWriter" 
		               commit-interval="1" retry-limit="3">
			    <retryable-exception-classes>
			    	<include class="java.lang.Exception"/>
			    </retryable-exception-classes>
			</chunk>
		</tasklet>
	</step>
</job>

JunitTest 구성 및 수행

JunitTest 구성

retrySample 설정과 관련 클래스들로 Junit Test를 수행한다. 이 때 배치가 수행되고, 관련된 내용을 확인할 수 있다.

✔ JunitTest 클래스의 구조는 배치실행환경 예제 Junit Test 설명을 참고한다.
✔ assertEquals(itemGenerator.getLimit()+2, itemProcessor.getCounter()) : 두 번의 재시도가 일어나도록 설정되어 있으므로, 전체 Process 처리 수가 reader에서 읽힌 데이터 수보다 2가 커야한다.

@ContextConfiguration(locations = { "/egovframework/batch/simple-job-launcher-context.xml", 
		"/egovframework/batch/job-runner-context.xml",
		"/egovframework/batch/jobs/retrySample.xml"})
public class EgovRetrySampleFunctionalTests {
 
	@Test
	public void testLaunchJob() throws Exception {
		jobLauncherTestUtils.launchJob();
		//items processed = items read + 2 exceptions
		assertEquals(itemGenerator.getLimit()+2, itemProcessor.getCounter());
	}
}

JunitTest 수행

수행방법은 JunitTest 실행을 참고한다.

참고자료