묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 배치
step-in-muti-thread 질문
안녕하세요 강의에서 학습하고 디버깅한 바탕으로 제 생각이 맞는지 궁금하여 질문 드립니다. 1. 4개의 스레드 풀이 존재하고 chunkSize=100, pageSize=300을 주었다고 쳤을 때 맨 처음 스레드가 데이터 베이스에서 300개를 조회2. AbstractPagingItemReader의 CopyOnWriteArrayList에 저장하고 이후 다른 스레드들은 해당 Reader를 공유하여 락 메커니즘이 적용된 doRead() 호출하여 list(count++)에서 데이터를 하나씩 가져와 개별 스택 안의 Chunk에 설정한 chunkSize 만큼 저장3. 그 후 process -> write 이렇게 작동하여 단일 스레드가 100개씩 3번 처리를 멀티 스레드를 이용해 마치 한 번 만에 300개 처리가 가능하여 속도를 향상시키는 게 맞을까요?
-
미해결
spring batch 관련 질문
chunk 지향 처리 방식에 대한 질문스프링 배치를 공부 중에 궁금한 점이 있어서 질문을 남기게 됐습니다.chunk란 여러 아이템을 묶은 덩어리 블록을 의미.chunkSize를 100으로 했을 경우제가 OPEN API로부터 데이터를 한번에 10개씩 읽어오도록 ItemReader를 설정했다면 (한 페이지에 10개의 데이터를 가져오도록 함) 그렇다면 동작 과정이ItemReader를 10개씩 10번 돌고, 이후에 ItemWriter로 이동하는 것인가요아니면 ItemReader, ItemProcessor, ItemWriter를 거치는 이 과정을 10번 하는 것인가요 ? chunk 단위로 트랜잭션을 처리한다고 이해했는데 위 과정에서 ItemWriter는 그럼 chunk단위로 10개씩 10번 모두 읽어온 이후에 처리해야 한다고 생각하는데어떻게 동작하는지 궁금합니다.또한 궁금한 것이 pageSize와 chunkSize를 동일시 하는 것이 성능에 좋다고 봤습니다.그렇다면 ItemReader에서 제가 만약 10개를 읽어온다면 chunkSize역시 10으로 하는게 좋다는 건가요 ?- 위와 동일하게 item을 10번 read하고 ItemWriter로 이동하는지 (ItemReader - ItemWriter)를 10번하고 하나의 트랜잭션에서 ItemWriter에서 동작하는 내용을 처리하는지 궁금합니다.. 부족한 질문이라 죄송합니다 ㅠㅠ
-
미해결스프링 배치
ThreadPoolTaskExecutor 여러 Job 실행 시 대기 처리
안녕하세요, 강사님 @Slf4j@RequiredArgsConstructor@Configuration@EnableBatchProcessingpublic class BatchConfig extends DefaultBatchConfigurer { @Override public JobLauncher createJobLauncher() throws Exception { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(1); taskExecutor.setMaxPoolSize(2); taskExecutor.setQueueCapacity(500); taskExecutor.afterPropertiesSet(); SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); jobLauncher.setTaskExecutor(taskExecutor); jobLauncher.setJobRepository(createJobRepository()); jobLauncher.afterPropertiesSet(); return jobLauncher; }//...} 공통으로 Job 관리할때는 JobLauncher에 ThreadPoolTaskExecutor을 등록해서 대기작업을 했습니다. 만약 엑셀 가져오기(업로드), 통계배치 등 배치Job 종류가 여러개이고 따로 관리해야할때, 엑셀 pool 2개, 통계배치pool 1개 이렇게 따로 pool 을 만들고 싶다면, 어떻게 해야할까요? Job 종류 마다 JobLauncher 을 여러개 만들어야 하는건가요? pool 개수 이상에 요청이 들어오면 대기상태였다가 앞의 배치 작업 끝나면 실행시키는 방식을 생각하고 있습니다. ex. 엑셀 pool 2개, 통계배치pool 1개 일 경우 엑셀가져오기 작업 요청이 3번 들어오면 앞의 두 작업은 실행되고 나머지 하나는 대기상태. 동시에 다른 통계배치작업 요청이 2번 들어오면 앞의 한 작업은 실행되고 나머지 하나는 대기상태.
-
미해결스프링 배치
docker db (mysql) 이 죽는 현상이 있습니다.
안녕하세요. 좋은 강의 만들어주셔서 감사합니다. 아래와 같이 강좌와 유사하게 spring.datasource.hikari 로 mysql 설정을 한 후 간단한 job 을 실행시키면 docker 로 설치한 mysql db 가 죽는 현상이 있습니다. 혹시 hikari 설정이 부족해서 그런 것일까요? 강좌에서는 잘 진행이 되는것 같아서 질문드립니다. 그래서 주석 처리하고 기존에 하던 방식으로 spring.datasource 를 이용해서 mysql 설정을 했습니다. spring.datasoruce 는 datasource 설정인거 같고, spring.datasource.hikari 는 hikari connection pool 설정인거 같은데요. 헷갈리네요. 어디에 db 설정을 정의하는것이 기본일까요? spring: profiles: active: local---spring: config: activate: on-profile: local datasource:# hikari:# jdbc-url: jdbc:mysql://av-api01-dc.nfra.io:23306/aida_project?useUnicode=true&characterEncoding=utf8# username: root# password: root# driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver batch: jdbc: initialize-schema: always