반응형
안녕하세요.
이번 시간에는 스프링 배치(spring batch)의 job 과 step이 실행 되었을 때, 상태 확인 및 무언가 작업을 추가하기 위한 리스너 사용법을 학습하겠습니다.
잡 리스너는 JobExecutionListener를 반환하는 메소드를 만들고 Job에 listener로 등록을 해주시면 되는데요.
아래 코드를 보도록 하겠습니다.
@Bean
public Job advancedJob(JobExecutionListener jobExecutionListener,
Step advancedStep) {
return jobBuilderFactory.get("advancedJob")
.incrementer(new RunIdIncrementer())
.validator(new LocalDateParameterValidator("targetDate"))
.listener(jobExecutionListener)
.start(advancedStep)
.build();
}
@JobScope
@Bean
public JobExecutionListener jobExecutionListener() {
return new JobExecutionListener() {
@Override
public void beforeJob(JobExecution jobExecution) {
log.info("[JobExecutionListener#beforeJob] jobExecution is " + jobExecution.getStatus());
}
@Override
public void afterJob(JobExecution jobExecution) {
if (jobExecution.getStatus() == BatchStatus.FAILED) {
log.error("[JobExecutionListener#afterJob] jobExecution is " + jobExecution.getStatus());
}
log.info("[JobExecutionListener#afterJob] jobExecution is " + jobExecution.getStatus());
}
};
}
jobExecutionListener() 메소드를 만들고 JobExecutionListener를 반환합니다. 리스너를 통해서 필요로 하는 작업을 구현 해주셔야 되는데요. job이 실행되기 전에는 beforeJob이 실행이 되고 job이 끝난 이후에는 aftetJob이 실행이 되겠습니다.
데이터베이스에 실행 결과를 쌓아 줄 수도 있고, 잡이 끝난 후에 배치 상태가 오류가 발생하였다면 텔레그램이나 슬렉같은 메신저로 알람을 받아 볼 수 있도록 구현을 해주 실 수도 있겠습니다.
step의 작업의 리스턴도 job과 유사합니다.
@JobScope
@Bean
public Step advancedStep(StepExecutionListener stepExecutionListener,
Tasklet advancedTasklet) {
return stepBuilderFactory.get("advancedStep")
.listener(stepExecutionListener)
.tasklet(advancedTasklet)
.build();
}
@StepScope
@Bean
public StepExecutionListener stepExecutionListener() {
return new StepExecutionListener() {
@Override
public void beforeStep(StepExecution stepExecution) {
log.info("[StepExecutionListener#beforeStep] stepExecution is " + stepExecution.getStatus());
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
log.info("[StepExecutionListener#afterStep] stepExecution is " + stepExecution.getStatus());
return stepExecution.getExitStatus();
}
};
}
StepExecutionListener를 반환하하는 메소드를 만들고 step설정에 listener를 등록 해주시면 되겠습니다.
#beforeJog이 실행이 되고 step 작업 후에 마지막으로 #afterJob이 실행이 되는 모습을 보실 수 있겠습니다.
반응형
'Programming > Spring Batch' 카테고리의 다른 글
[Spring Batch] 스프링 배치 로직 담당 processor 학습 (0) | 2022.04.12 |
---|---|
[Spring Batch] 스프링 배치를 활용 하여 파일 읽기 (reader) (0) | 2022.04.11 |
[Spring Batch] 스프링 배치 파라미터 입력 및 검증 (0) | 2022.04.05 |
[Spring Batch] 스프링 배치 테스트 코드 작성 (0) | 2022.04.01 |
[Spring Batch] 스프링 배치로 데이터를 읽고 쓰기 예제 (itemXXX 사용) (0) | 2022.03.31 |