Study/스프링배치 완벽 가이드
Day 6. ExecutionContext
주지민
2021. 12. 26. 21:36
반응형
스프링 배치 완벽 가이드 내용 정리입니다
3장. 예제 잡 어플리케이션은 스킵했습니다
http://www.yes24.com/Product/Goods/99422216
1. ExecutionContext
- 배치 처리는 특성상 어떤 스텝이 실행중인지, 해당 스텝이 처리한 레코드 갯수등의 상태를 가지고 있다
- 스프링 배치는 이와 같은 실행 상태를 알아서 관리해준다
- 실제 잡 실행 시도를 나타내는 JobExecution에는 잡 상태를 저장하는 ExecutionContext를 가지고 있다
- ExecutionContext는 배치 잡의 세션이다 ( 웹어플리케이션이 HttpSession을 사용해 상태를 저장하듯이 )
- ExecutionContext는 간단한 key-value 쌍을 보관하는 도구
- 잡을 다루는 과정에서 여러개가 존재할 수 있으며 스텝 실행 시도를 나타내는 StepExecution 또한 ExecutionContext을 가진다
2. ExecutionContext 조작해보기
- ExecutionContext는 앞에서 설명한 JobExecution 또는 StepExecution의 일부분이다
- 예제 코드
// SimpleExecutionContext.java @RequiredArgsConstructor @Configuration public class SimpleExecutionContext { private static final String JOB_NAME = "simpleExecutionContextJob"; private static final String STEP_NAME = "simpleExecutionContextStep"; private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Bean(name = JOB_NAME) public Job simpleExecutionContextJob() { return this.jobBuilderFactory.get(JOB_NAME) .start(simpleExecutionContextStep()) .build(); } @Bean(name = STEP_NAME) public Step simpleExecutionContextStep() { return this.stepBuilderFactory.get(STEP_NAME) .tasklet(new HelloWorld()) .build(); } private static class HelloWorld implements Tasklet { private static final String HELLO_WORLD = "Hello, %s"; @Override public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { String name = (String) chunkContext.getStepContext() .getJobParameters() .get("name"); ExecutionContext executionContext = chunkContext.getStepContext() .getStepExecution() .getJobExecution() .getExecutionContext(); executionContext.put("user.name", name); System.out.println(String.format(HELLO_WORLD, name)); return RepeatStatus.FINISHED; } } }
- JobExecution에 있는 ExecutionContext에 "user.name"을 키로하는 name값을 저장했다
- 결과
728x90
반응형