BATCH_JOB_EXCUTION 실행시마다 쌓임

STATUS: 종료가 정상적으로 됬는가?
BATCH_JOB_EXCUTION_PARAMS
job을 실행할 때 주는 파라미터.
BATCH_JOB_EXCUTION_SEQ -> 시퀀스
BATCH_JOB_INSTANCE -> JOB과 파라미터의 조합
jobBuilderFactory.get("helloWorldJob")
.incrementer(new RunIdIncrementer()) //강제로 매번 다른 id를 실행할 때 파라미터로 부여
배치공부 방법. 진행 db를 하나 놓고, 백업 db를 하나 놓은 후에
실행 후 비교 반복.
mysqldumb -> mysql db의 백업 파일 생성
DB 백업
mysqldump -u root batch_ex_24_04 > batch_ex_24_04.sql
mysqldump -u root DB명 > 백업파일명.sql
DB 백업본을 다시 복원
mysql -u root batch_ex_24_04_backup < batch_ex_24_04.sql
mysql -u root DB명 < 백업파일명.sql
Session Scope
세션 유효 기간동안 유효한 빈
싱글톤 -> 스프링부트 앱이 꺼지기 전까지 유효
세션 -> 브라우저당 객체가 한개씩
리퀘스트 -> 요청당 객체가 한개씩. 응답을 하는 시점에서 생명주기 종료
프로토타입 -> 그냥 매번 새로 만듦
Scope 범위
Bean 프로그램 실행시 일단 생성해서 올림
그런데 Scope가 job이면 job 이 실행될 때 생성되고
step이면 step이 실행될 때 생성된다. -> 메모리 낭비가 안된다.
@Bean
public Job helloWorldJob() {
return jobBuilderFactory.get("helloWorldJob")
.incrementer(new RunIdIncrementer()) //강제로 매번 다른 id를 실행할 때 파라미터로 부여
.start(helloWorldStep1())
.next(helloWorldStep2())
.build();
}
하나의 job에서 step을 순서대로 실행할 수 있다.
@Bean
@StepScope
public Tasklet helloWorldTasklet2() {
return (stepContribution, chunkContext) -> {
System.out.println("Hello World 2!");
if(true) {
throw new Exception("실패 : 핼로우월드 타스클릿 2");
}
return RepeatStatus.FINISHED;
};
}
배치 실행이 실패할 경우 EXIT_CODE는 FAILED가 된다.
job 하나에 step이 여러개 있을 경우, job이 실패 했을 때 성공한 step도 다시 실행한다.
그런데 이건 비효율적이다.
스프링 배치
성공시 동작
-> 같은 명령 1번째 실행(성공)은 수행
-> 같은 명령 2번째 실행(성공)은 무시
실패시 동작
-> 같은 명령 1번째 실행(step 5개중 마지막 step 실패)는 수행
-> 같은 명령 2번째 실행에서는 마지막 step만 실행
어? 우리 코드는 왜 성공한 것도 다시 실행중이지?
.incrementer(new RunIdIncrementer()) 매번 새로운 파라미터를 생성하는 코드를 넣었기 때문.
BATCH_JOB_INSTANCE가 매번 새로 생성되버린다.

run configuration을 통해 job이름을 설정할 수 있음.

파라미터도 여기서 넘기면 된다.
만약 같은 job과 같은 parameter로 실행하면 에러가 발생한다.
@Value("#{jobParameters['name']}")
파라미터 받는 방법.
ebook 서점
-실물 (x)
-상품(번호, 제목, 가격, 출판사, 작가)
의류 쇼핑몰