====== 배치 Runner 예제 ======
===== 개요 =====
배치 수행에 사용되는 EgovBatchRunner의 사용법을 보여주는 예제이다. 비동기 방식으로 실행하는 Job의 시작, 정지, 재시작 방법을 보여준다.
===== 설명 =====
==== 설정 ====
=== EgovBatchRunner 설정 ===
EgovBatchRunner의 설정 방법은 [[egovframework:rte2:brte:batch_core:batch_runner#EgovBatchRunner| 배치 Runner]]를 참고한다.
=== Launcher 설정 ===
== 배치 Runner 예제의 Job 설정 파일인 batchRunnerTest.xml을 확인한다. ==
본 예제에서는 비동기 방식으로 Job을 수행한다. 이를 위해 JobLauncher의 TaskExecutor에 SimpleAsyncTaskExecutor 클래스를 지정한다.
=== Job 설정 ===
== 배치 Runner 예제의 Job 설정 파일인 batchRunnerTest.xml을 확인한다. ==
✔ Job 재시작시, Job 시작에 사용되었던 JobParameter를 사용하기 위해 JobParametersIncrementer를 이용한다.
\\ ✔ batchRunnerTestJob에서 JobParametersIncrementer 클래스를 사용하기 위해 simpleJob을 상속받는다. 이때 simpleJob은 restartable이 true로 설정된다.
\\ ✔ Step도 simpleStep을 상속받아서 구현한다.
==== JunitTest 구성 및 수행 ====
=== JunitTest 구성 ===
== 배치 Runner 설정과 관련 클래스들로 Junit Test를 수행한다. 이 때 배치가 수행되고, 관련된 내용을 확인할 수 있다.==
배치 실행 순서는 아래와 같다.
- EgovBatchRunner의 start() 메소드에 Job의 이름, JobParameter를 전달하여 batchRunnerTestJob을 시작하고, executionId를 얻어온다.
- executionId를 이용하여 실행 중인 Job의 이름, JobParameter가 일치하는지 확인한다.
- stopAndCheckStatus()를 이용하여 실행 중인 Job을 정지한다.
- EgovBatchRunner의 restart() 메소드에 처음 시작했던 Job의 executionId를 전달하여 batchRunnerTestJob을 재시작 한다.
- 다시 한 번 stopAndCheckStatus()를 이용하여 실행 중인 Job을 정지한다.
@Test
public void testStartStopResumeJob() throws Exception {
String jobName = "batchRunnerTestJob";
String jobParameters = egovBatchRunner.createUniqueJobParameters();
long executionId = egovBatchRunner.start(jobName, jobParameters);
assertEquals(jobName, egovBatchRunner.getJobInstance(executionId).getJobName());
assertEquals(jobParameters.toString(), egovBatchRunner.getJobOperator().getParameters(executionId));
stopAndCheckStatus(executionId);
long resumedExecutionId = egovBatchRunner.restart(executionId);
assertEquals(jobParameters.toString(), egovBatchRunner.getJobOperator().getParameters(resumedExecutionId));
stopAndCheckStatus(resumedExecutionId);
}
stopAndCheckStatus() 메소드는 Job 실행 정보를 확인하고 실행 중인 Job을 정지하는 역할을 한다.
- 비동기 실행 중인 Job이 시작 상태로 들어갔는지 보장하기 위해, Thread.sleep()을 이용하여 1초간 대기한다.
- 실행 정보를 확인하고, EgovBatchRunner의 stop() 메소드를 이용하여 실행 중인 Job을 정지한다.
- 실행 중인 Job의 excutionId가 존재하는지 확인하고 0.1초간 대기한다.
- 대기 후, 해당 Job의 Summary를 출력하고, BatchStatus가 Stopped 인지 확인한다.
private void stopAndCheckStatus(long executionId) throws Exception {
String jobName = egovBatchRunner.getJobInstance(executionId).getJobName();
// wait to the job to get up and running
Thread.sleep(1000);
Set runningExecutions = egovBatchRunner.getJobOperator().getRunningExecutions(jobName);
assertTrue("Wrong executions: " + runningExecutions + " expected: " + executionId, runningExecutions
.contains(executionId));
assertTrue("Wrong summary: " + egovBatchRunner.getJobOperator().getSummary(executionId),
egovBatchRunner.getJobOperator().getSummary(executionId).contains(BatchStatus.STARTED.toString()));
egovBatchRunner.getJobOperator().stop(executionId);
int count = 0;
while (egovBatchRunner.getJobOperator().getRunningExecutions(jobName).contains(executionId) && count <= 10) {
logger.info("Checking for running JobExecution: count=" + count);
Thread.sleep(100);
count++;
}
runningExecutions = egovBatchRunner.getJobOperator().getRunningExecutions(jobName);
assertFalse("Wrong executions: " + runningExecutions + " expected: " + executionId, runningExecutions
.contains(executionId));
assertTrue("Wrong summary: " + egovBatchRunner.getJobOperator().getSummary(executionId),
egovBatchRunner.getJobOperator().getSummary(executionId).contains(BatchStatus.STOPPED.toString()));
// there is just a single step in the test job
Map summaries = egovBatchRunner.getJobOperator().getStepExecutionSummaries(executionId);
System.err.println(summaries);
assertTrue(summaries.values().toString().contains(BatchStatus.STOPPED.toString()));
}
===JunitTest 수행===
== ==
수행방법은 [[egovframework:dev2:tst:test_case#Test Case 실행| JunitTest 실행]]을 참고한다.
==== 결과확인 ====
Console 창에서 Job Summary내용 중, BatchStatus가 Stopped 임을 확인한다.
{{:egovframework:rte2:brte:batch_example:batchrunner1_red.png|}}
===== 참고자료 =====
* [[egovframework:rte2:brte:batch_core:batch_runner|Batch Runner]]