- Listener -
1) Listener?
- Spring Batch에서는 메인 로직 외에 구간 사이사이에 어떤 일을 처리하고자 할때 Listener를 사용한다.
예를 들면 Job, Step, chunk, ItemReader, ItemWriter, ItemProcessor의 실행 직전과 직후에 어떤 행위를 할지 정의할 수 있다.
2) Listener의 종류
- JobExecutionListener
- StepExecutionListener
- ChunkListener
- ItemReadListener
- ItemProcessListener
- ItemWriteListener
3) JobExecutionListener
public interface JobExecutionListener {
void beforeJob(JobExecution jobExecution);
void afterJob(JobExecution jobExecution);
}
@Bean
public Job sampleJob(
JobBuilderFactory jobBuilderFactory,
JobListener jobListener,
Step sampleStep
){
return jobBuilderFactory
.get("sampleJob")
.listener(jobListener)
.start(sampleStep)
.build();
}
- Job의 실행 전 beforeJob / 실행 후 afterJob을 구현
- 인자로 JobExecution을 넘겨준다.
- 구현된 JobExecutionListener는 위처럼 jobBuilderFactory에서 Job을 만들 때 listerner()에 포함시켜주면 된다.
public class JobListener implements JobExecutionListener {
@Override
public void afterJob(JobExecution jobExecution) {
// jobExecution의 Job Instance
jobExecution.getJobInstance();
// jobExecution 에서 사용한 Job Parameters
jobExecution.getJobParameters();
// job 시작시간과 종료시간
jobExecution.getStartTime();
jobExecution.getEndTime();
// job의 실행결과 (exit code)
jobExecution.getExitStatus();
// job의 현재상태 (Batch Status)
jobExecution.getStatus();
// job execution context
jobExecution.getExecutionContext();
}
}
public class JobListener implements JobExecutionListener {
@Override
public void beforeJob(JobExecution jobExecution) {
// job execution context
jobExecution.getExecutionContext();
Map<String, Object> executionContextMap = new HashMap<>();
executionContextMap.put("name", "홍길동");
executionContextMap.put("birth", LocalDate.of(1998, 1, 2));
jobExecution.setExecutionContext(
new ExecutionContext(executionContextMap)
);
}
}