partitionStep의 itemReader에 관하여
356
작성한 질문수 2
안녕하세요.! 대용량 배치를 개발하기 위해
파티션스텝을 이용하여 개발중입니다.
파티션 메인스텝에 워커 스텝을 지정하고
실행하였는데요.
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가 동작하는것 같습니다...
제 생각이 맞을까요? 맞다면 왜 실제로그는 동기적인 방식으로 되는지 궁금합니다.
답변 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
153
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
175
2
jdbcCursorReader, jdbcPagingReader 질문
0
146
1
step muti-thread 질문
0
111
1
itemSteam open update close 질문
0
112
1





