배치 수행 시, 처리되는 배치관련 정보들에 대한 기록(Log)을 Registry 와 DB에 저장되고 이를 확인하는 과정을 보여주는 예제이다.
배치 실행로그 예제를 위해 특별히 Job을 설정하는 내용은 없다. 이 예제에서 제공하는 Job의 상세 내용은 건너뛰기(Skip)기능 예제의 Job 설정과 같으므로 이를 참고한다.
<job id="logManagementJob" incrementer="incrementer" xmlns="http://www.springframework.org/schema/batch"> <step id="step1" parent="baseStep"> <tasklet> <chunk reader="fileItemReader" processor="tradeProcessor" writer="tradeWriter" commit-interval="3" skip-limit="10"> <skippable-exception-classes> <include class="org.springframework.batch.item.file.FlatFileParseException" /> <include class="org.springframework.batch.item.WriteFailedException" /> </skippable-exception-classes> </chunk> </tasklet> <next on="COMPLETED WITH SKIPS" to="errorPrint" /> <fail on="FAILED" exit-code="FAILED" /> </step> <step id="errorPrint"> <tasklet ref="errorLogTasklet" /> </step> </job>
✔ JunitTest 클래스의 구조는 배치실행환경 예제 Junit Test 설명을 참고한다.
✔ assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()) : 배치수행결과가 COMPLETED 인지 확인한다.
✔ assertEquals(”[logManagementJob]”, jobRegistry.getJobNames().toString()) : Registry에 저장된 JobName 확인한다.
✔ assertEquals(“3 records were skipped!”, simpleJdbcTemplate.queryForObject(“SELECT MESSAGE from ERROR_LOG where JOB_NAME = ?”, String.class, “logManagementJob”))
: DB에 저장된 ERROR_LOG 테이블 정보 확인한다.
@ContextConfiguration(locations = {"/egovframework/batch/simple-job-launcher-context.xml", "/egovframework/batch/jobs/logManagementJob.xml", "/egovframework/batch/job-runner-context.xml" }) public class EgovLogManagementFunctionalTests { ... @Test public void testUpdateCredit() throws Exception { JobExecution jobExecution = jobLauncherTestUtils.launchJob(); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); // Registry : Job 정보에 대한 로그기록 assertEquals("[logManagementJob]", jobRegistry.getJobNames().toString()); // DB : ERROR_LOG 테이블의 로그 수 assertEquals(1, SimpleJdbcTestUtils.countRowsInTable( simpleJdbcTemplate, "ERROR_LOG")); // DB : ERROR_LOG 테이블의 로그 데이터 assertEquals("3 records were skipped!",simpleJdbcTemplate.queryForObject( "SELECT MESSAGE from ERROR_LOG where JOB_NAME = ?",String.class, "logManagementJob")); } }
수행방법은 JunitTest 실행을 참고한다.