inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

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개 처리가 가능하여 속도를 향상시키는 게 맞을까요?

  • 스프링
  • 스프링배치
  • springbatch
  • multithread
  • 비동기
hoonseung 댓글 1 좋아요 0 조회수 132

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에서 동작하는 내용을 처리하는지 궁금합니다.. 부족한 질문이라 죄송합니다 ㅠㅠ

  • spring-batch
  • springbatch
백엔드공부화이팅 댓글 1 좋아요 0 조회수 261

ThreadPoolTaskExecutor 여러 Job 실행 시 대기 처리

미해결

스프링 배치

안녕하세요, 강사님 @Slf4j @RequiredArgsConstructor @Configuration @EnableBatchProcessing public 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번 들어오면 앞의 한 작업은 실행되고 나머지 하나는 대기상태.

  • springbatch
  • spring-boot
  • spring-batch
youngju Cho 댓글 1 좋아요 1 조회수 1450

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

  • docker
  • spring-boot
  • mysql
  • spring-batch
  • spring
  • springbatch
안용상 댓글 2 좋아요 1 조회수 657

인기 태그

인프런 TOP Writers

주간 인기글