본문 바로가기

강의/스프링배치

(33)
JobStep defaultJobParametersextractor
TaskletStep 아키텍처 1. Job과 TaskletStep 사이에서 StepExecution 도메인 객체가 생성이 됨. 2. StepExecution 안에 ExecutionContext를 생성하고, taskletStep에 StepExecution을 전달한다. 3. 이때 ExecutionContext의 배치 상태는 STARTED(시작) 종료 상태는 EXECUTING(실행) 상태이다. 4. TaskletStep, RepeatTemplate 사이에서 StepListener의 beforeStep이 호출된다. 5. tasklet 실행이 끝나게 되면 RepeatStatus.Continuable -> 에서 RepeatStatus.finished 상태값으로 변한다. (null 값을 return하긴 함) 6. StepListener에서 aft..
TaskletStep 아키텍처 1. Job과 TaskletStep 사이에서 StepExecution 도메인 객체가 생성이 됨. 2. StepExecution 안에 ExecutionContext를 생성하고, taskletStep에 StepExecution을 전달한다. 3. 이때 ExecutionContext의 배치 상태는 STARTED(시작) 종료 상태는 EXECUTING(실행) 상태이다. 4. TaskletStep, RepeatTemplate 사이에서 StepListener의 beforeStep이 호출된다. 5. tasklet 실행이 끝나게 되면 RepeatStatus.Continuable -> 에서 RepeatStatus.finished 상태값으로 변한다. (null 값을 return하긴 함) 6. StepListener에서 aft..
tasklet() - startlimit() / allowStartIfComplete StepContribution과 ChunkContext 에는 step 과 job과 관련된 정보들이 저장되어 있다. startLimit() step의 실행 횟수를 조정할 수 있다. 재시작을 할 수 있는 횟수 제한이라고 보면 된다. startLimit(3) 이라고 한다면 해당 step을 총 3번까지 실행할 수 있다는 것이고 3을 넘게 되면 아래와 같은 에러가 발생한다. allowStartifComplete() 재시작 가능한 job에서 step의 이전 성공 여부와 상관없이 항상 step을 실행하기 위한 설정 (default: 실패 -> 재시작 가능 , 성공 -> 재시작 불가능) -> 성공을 했더라도 재시작이 가능하게 됨.
TaskletStep spring batch 가 제공하는 step의 구현체 중에서 가장 기본이 되는 구현체이다. stepBuilder 클래스가 하위 builder 클래스를 통해서 다양한 step을 만들 수 있는데 그중 우리는 TaskletStep을 실행시키는 Step에 대해서 살펴볼 예정이다. repeatTemplate은 반복하는 기능을 가진 클래스이다. TaskletStep은 반복 실행이 기본이다. taskletstep은 task기반과 chunk 기반으로 나눠져 있다. repeatTemplate을 설정하는 클래스 stepOperations (반복에 대한 설정) taskexecutor는 multithread로 task를 수행해야 하는 경우에 대한 설정 AbstractStep 에서 execute 메서드에서 실행이 됨 (Simp..
StepBuilderfactory taskletStepBuilder: tasklet 인터페이스를 구현한 구현체를 실행시킴 아래와 같이 batch job을 구성하였다. @Bean public Job batchJob() { return this.jobBuilderFactory.get("batchJob") .incrementer(new RunIdIncrementer()) .start(step1()) .next(step2()) .next(step4()) .next(step5()) // .next(step3()) .build(); } step1을 살펴보겠습니다. step1은 3가지 과정을 거치고 있습니다. - get 메서드 호출 - tasklet 메서드 호출 - build 메서드 호출 각각의 과정이 하는 역할을 살펴보도록 하겠습니다. @Bean ..
simpleJob 아키텍처 jobLauncher와 simpleJob 사이의 발생하는 일 job이 실행될 때 오직 하나의 값을 가진 유일한 객체인 jobinstance가 생성된다. jobExecution은 jobInstance의 한번의 실행이고 jobInstatnce와 jobExecution은 1:n 고나계이다. jobExecution은 ExecutionContext 객체를 생성해서 포함하고 있다. simpleJob과 Step 사이 발생하는 일 job을 구성할 때 joblistener를 구성할 수 있고 simplejob과 step사이 job이 실행 전 beforeJob을 실행할 수 있다. step과 tasklet 사이에는 step 마다 stepExecution이 생성되고 StepExeuction은 내부으로 Executionconte..
스프링 배치 실행 - incrementer() jobParameter 값을 해당 job을 식별할 수 있는 유일한 값이다. 일반적으로 동일한 jobParameter 값으로는 재시작을 할 수 없다. 그러나 job이 실행되기 전, 선행되어야 하는 job이 존재하고, 이 job의 parameter가 동일한 경우가 있을 수 있다. 이러한 경우에 사용하는 것이 incrementer 이다. incremental 속성은 validator와 동일하게 CommonJobProperties에 저장되고, 이 내용들은 결국에 SimpleJob 속성에 저장이 된다. Spring batch 에서는 기본적으로 RunIdIncrementer 클래스를 제공하고 있으며 이를 이용하여 incrementer 사용할 수 있다. RunIdIncrementer 클래스는 JobParameters..