반응형
스프링 배치 완벽 가이드 내용 정리입니다
3장. 예제 잡 어플리케이션은 스킵했습니다
http://www.yes24.com/Product/Goods/99422216
1. 잡 리스너
- 모든 잡은 생명주기를 갖는다
- 스프링 배치는 생명주기의 여러 시점에 로직을 추가할 수 있는 기능을 제공한다
- 잡 실행과 관련이 있다면 JobExecutionListener를 사용할 수 있다
- JobExecutionListener
- 해당 인터페이스는 beforeJob과 afterJob의 두 메서드를 제공한다
- beforeJob 메서드를 이용해 잡 실행전에 준비해둬야할 것이 있으면 해당 로직을 실행하면 좋다
- afterJob 메서드를 이용해 잡의 성공과 실패의 영향을 미치지는 않은 배치 완료후 정리 작업을 하기 좋다
- 작성하는 방법 1
- org.springframeowork.batch.core.JobExecutionListener 인터페이스를 구현
- 위에서 말한대로 beforeJob과 afterJob 두 메서드를 가지고 있다
- 각각은 JobExecution을 파라미터로 전달받아 실행되며 각각 잡을 실행하기 전, 잡을 실행된 후에 실행된다
- afterJob 메서드는 잡의 완료 상태와 관계없이 호출된다
- JobExecutionListener 작성
// JobLoggerListener.java public class JobLoggerListener implements JobExecutionListener { private static final String START_MESSAGE = "%s is beginning execution"; private static final String END_MESSAGE = "%s has completed with the status %s"; @Override public void beforeJob(JobExecution jobExecution) { System.out.println(String.format(START_MESSAGE, jobExecution.getJobInstance().getJobName())); } @Override public void afterJob(JobExecution jobExecution) { System.out.println(String.format(END_MESSAGE, jobExecution.getJobInstance().getJobName(), jobExecution.getStatus())); } }
- Job 작성
// JobLoggerListenerBatch.java @RequiredArgsConstructor @Configuration public class JobLoggerListenerBatch { private static final String JOB_NAME = "jobLoggerListenerBatchJob"; private static final String STEP_NAME = "jobLoggerListenerBatchStep"; private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Bean(JOB_NAME) public Job jobLoggerListenerBatchJob() { return this.jobBuilderFactory.get(JOB_NAME) .start(jobLoggerListenerBatchStep()) .incrementer(new RunIdIncrementer()) .listener(new JobLoggerListener()) .build(); } @Bean(STEP_NAME) public Step jobLoggerListenerBatchStep() { return this.stepBuilderFactory.get(STEP_NAME) .tasklet((contribution, chunkContext) -> { System.out.println("tasklet execute"); return RepeatStatus.FINISHED; }) .build(); } }
- 실행 결과
// result 2021-11-26 00:19:15.899 INFO 8035 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=jobLoggerListenerBatchJob]] launched with the following parameters: [{run.id=1}] jobLoggerListenerBatchJob is beginning execution 2021-11-26 00:19:15.927 INFO 8035 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [jobLoggerListenerBatchStep] tasklet execute 2021-11-26 00:19:15.943 INFO 8035 --- [ main] o.s.batch.core.step.AbstractStep : Step: [jobLoggerListenerBatchStep] executed in 16ms jobLoggerListenerBatchJob has completed with the status COMPLETED
- org.springframeowork.batch.core.JobExecutionListener 인터페이스를 구현
- 작성하는 방법 2
- JobExecutionListner를 구현하지 않고 @BeforeJob, @AfterJob 어노테이션을 사용해 작성할 수 있다
- beforeJob, afterJob 메서드를 똑같이 구현하되 @BeforeJob, @AfterJob 어노테이션을 붙여준다
- 단 JobListenerFactoryBean의 getListener 메서드를 통해 래핑해줘야 사용이 가능하다
728x90
반응형
'Study > 스프링배치 완벽 가이드' 카테고리의 다른 글
Day 6. ExecutionContext (0) | 2021.12.26 |
---|---|
Day 4. 잡 파라미터 이해하기 (0) | 2021.11.25 |
Day 3. 잡과 스텝 이해하기 (0) | 2021.11.06 |
Day 2. 스프링 배치 (0) | 2021.11.05 |
Day 1. 배치와 스프링 (0) | 2021.11.01 |