partitionStep의 itemReader에 관하여
356
2 asked
안녕하세요.! 대용량 배치를 개발하기 위해
파티션스텝을 이용하여 개발중입니다.
파티션 메인스텝에 워커 스텝을 지정하고
실행하였는데요.
Thread1의 itemReader가 1만건의 데이터를 fetch하는 동안
Thread2의 itemReader는 Thread1의 itemReader의 fetch가 끝날때까지 기다리는건가요??
제가 기대한 로그는
Thread1 : result set row 100
Thread2 : result set row 100
Thread1 : result set row 200
Thread2 : result set row 200
동시에 스레드가 실행되어 위와 같이 병렬적으로 itemreader가 수행되어야 한다고 생각하는데
실제 로그는
Thread1 : result set row 100
Thread1 : result set row 200
Thread2 : result set row 100
Thread2 : result set row 200
위와 같이 Thread1의 itemreader가 끝이 나야 Thread2의 itemreader가 동작하는것 같습니다...
제 생각이 맞을까요? 맞다면 왜 실제로그는 동기적인 방식으로 되는지 궁금합니다.
Answer 1
0
질문자입니다.!
itemReader의 선언부인 (1)쪽에 data fetch를 받는 경우에
깍 쓰레드가 패치를 모두 받아야 다른 쓰레드가 진행되고 있는데 이게 맞나요??
@StepScope
@Bean
fun reader(
@Value("#{stepExecutionContext['minValue']}")
minValue: Long? = null,
@Value("#{stepExecutionContext['maxValue']}")
maxValue: Long? = null,
): ItemReader<String> {
//다른 모듈에서 row fetch 1만건 진행 --(1)
return ListItemReader(row fetch 1만건)
}
0
Partitioning 은 병렬로 실행되는 방식이고 Thread 마다 할당된 ItemReader 역시 별도의 객체로 생성되기 때문에 ItemReader 객체 서로간 간섭없이 동시적으로 수행이 되어야 정상입니다.
즉 ItemReader 1 과 ItemReader2 가 동시에 실행이 되어야 맞습니다.
콘솔에 찍힌 순차적 실행 로그가 동기적으로 실행된다는 의미를 품고 있는지는 잘 모르겠으나 Partitioning 과 @Scope 의 조합은 ItemReader 의 싱글톤 프록시 생성과 프록시를 통한 실제 객체들이 런타임 즉 실행 시점에 생성된다는 점입니다.
그리고 각 객체들은 상호간 동기화의 간섭없이 독립적인 실행을 하게 됩니다.
그래서 ItemReader1 이 데이터를 읽어온 후 ItemReader2 가 읽어오는 식으로 동작하지는 않습니다.
강의의 소스를 토대로 해서 다시 한번 천천히 테스트 해 보시기 바랍니다.
스프링 배치 버전 질문
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
152
1
ItemReaderAdapter 종료
0
80
1
[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader
0
179
2
Spring Batch 배포 질문
0
245
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
174
2
jdbcCursorReader, jdbcPagingReader 질문
0
146
1
step muti-thread 질문
0
110
1
itemSteam open update close 질문
0
111
1

