inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

ItemStream

ItemStream의 open 메서드 관련 궁금합니다

623

Minkyu Jeon

작성한 질문수 1

0

안녕하세요 강사님~
먼저 질좋은 강의를 만들어주셔서 감사합니다 :)

ItemStream 관련 궁금증이 생겨 질문드리게 되었는데요!

public void open(ExecutionContext executionContext)
위 메서드의 ExecutionContext 는 Step의 ExecutionContext 로 이해했습니다.

그런데 Step 중간에 오류가 발생할 경우. 전체 Job이 실패하고.
JobExecution & JobExecutionContext 가 새로 생성되며, 해당 Step의 StepExecution & StepExecutionContext 또한 새로 생성되어.
재시작전의 StepExecutionContext 에 저장해둔 index 는 꺼내어 사용 못하는게 아닌가요..?!

재시작 후에 ExecutionContext 에서 index를 가져올 수 있는 부분이 헷갈립니다ㅜ

추가로 index 예제는 ItemStream 통한 복구대비를 해두어. 재시작시 오류가 발생한 Chunk의 item부터 이어서 처리할 수 있었는데요.
ItemStream 없이 ItemReader 만 사용할 경우는 트랜잭션 커밋되어 반영된 Chunk 가 있어도 무시하고 처음 Chunk 부터 다시 작업을 하게되는걸까요?

spring-boot spring-batch

답변 1

1

정수원

step 의 executionContext 에 저장된 정보는 DB 에 실시간적으로 저장이 됩니다.

그래서 Job 이 실패하고 나서 다시 재시작 할 때 스프링 배치가 DB 에 저장된 가장 최신의 StepExecution 에 연결되어 있는 ExecutionContext 의 정보를 가지고 와서 새롭게 StepExecution 과 ExecutionContext 을 생성하기 때문에 DB 에 있는 index 의 값을 참조할 수 있습니다. 객체가 새롭게 생성되는 것과는 별개로 DB 에서 값을 가지고 와서 참조하는 것은 Job 이 재시작하더라도 얼마든지 가능합니다.

그리고 ItemStream 이 없다면 open(), update(ExecutionContext), close() 와 같은 기능이 실행이 안되고 ExecutionContext 도 참조할 수 없기 때문에 처음부터 다시 시작하게 됩니다.

0

Minkyu Jeon

재시작 후 ExecutionContext를 생성할때, DB에서 가장 최신 StepExecution 의 ExecutionContext 를 가져와 사용하는거군요!

실패시 이어서 진행하기 위해서도 단지 트랜잭션 커밋뿐 아니라 , ItemStream 에서 ExecutionContext 을 통한 작업 동기화 + 이어서 작업하도록 하는 로직이 필요하다고 이해했습니다~

답변 주셔서 감사합니다!

스프링 배치 버전 질문

0

122

1

소스코드가 어디에 있나요?

0

96

2

트랜잭션 예외

0

92

1

질문이 있습니다.

0

130

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

125

2

여러 JOB 설정하는법

0

150

2

강의 자료 다른 방법 있을까요?

0

154

1

JobExecution과 JobExecutionContext와의 관계

0

186

2

특정 job만 실행

1

252

1

Batch 성능 질문

0

153

1

ItemReaderAdapter 종료

0

80

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

179

2

Spring Batch 배포 질문

0

246

2

spring batch 버전

0

236

2

retry count 관련 질문

0

172

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

330

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

235

2

Multithread step과 AsyncItemProcessor

0

203

2

job 재실행

0

251

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

183

1

Multi-threaded-step과 Partitioning 차이 확인

0

175

2

jdbcCursorReader, jdbcPagingReader 질문

0

146

1

step muti-thread 질문

0

111

1

itemSteam open update close 질문

0

112

1