[SPRING] Spring 배치 단일 파일에서 다중 파일로 다중 스레드 처리
SPRINGSpring 배치 단일 파일에서 다중 파일로 다중 스레드 처리
내 문제 설명. 1,000 만 개의 데이터가있는 csv 파일을 읽고이를 db에 저장하십시오. 가능한 한 최소 시간으로
나는 자바의 Simple Multi Threaded Executor를 사용하여 구현했으며 로직은 스프링 배치의 덩어리와 거의 비슷하다. csv 파일에서 미리 구성된 데이터 수를 읽은 다음 스레드를 만들고 데이터 유효성을 검사 한 스레드에 데이터를 전달한 다음 다중 스레드에서 실행되는 파일에 기록합니다. 일단 모든 작업이 완료되면 각 파일을로드하기 위해 SQL 로더를 호출합니다. 이제이 코드를 스프링 배치로 옮기고 싶습니다 (스프링 배치에 초보자입니다).
여기 내 질문이있다. 1. 작업에서 Items Writer를 Item Writer를 멀티 스레드로 만들 수 있습니까? (스레드가 데이터에 쓰기 전에 데이터를 처리하기 위해 새 스레드를 만듭니다.) 아니라면 두 단계를 만들 필요가 첫 번째 단계는 단일 스레드 및 다중 스레드 개별 파일 쓰기 쓰레드 파일을 읽을 수 있지만 이전 작업에서 다른 작업에 데이터 목록을 전달하는 방법. 2. 단일 스레드에 오류가있는 경우 전체 일괄 작업 처리를 어떻게 중지 할 수 있습니까? 3. 특정 간격 후에 실패한 경우 배치 작업을 재 시도하는 방법. 실패한 경우 다시 시도 옵션이 있다는 것을 알고 있지만 실패한 경우 특정 간격 후에 작업을 다시 시도 할 수있는 옵션을 찾을 수 없습니다. 여기서는 스케쥴러에 대해 언급하지 않습니다. 배치 작업이 이미 스케쥴러에서 실행 되었기 때문입니다.하지만 실패하면 3 분 후에 재실행해야합니다.
해결법
-
==============================
1.여기 내가 어떻게 문제를 해결 했는가.
여기 내가 어떻게 문제를 해결 했는가.
-
==============================
2.내 (미래) 일에 관심이있어서 도움이나 문제 해결 방법을 알려주십시오! 제 징후가 도움이되기를 바랍니다.
내 (미래) 일에 관심이있어서 도움이나 문제 해결 방법을 알려주십시오! 제 징후가 도움이되기를 바랍니다.
-
==============================
3.입력 파일을 여러 파일로 분할하고 Partitionner를 사용하고 스레드로 작은 파일을로드 할 수 있지만 오류가 발생하면 DB 정리 후 모든 작업을 다시 시작해야합니다.
입력 파일을 여러 파일로 분할하고 Partitionner를 사용하고 스레드로 작은 파일을로드 할 수 있지만 오류가 발생하면 DB 정리 후 모든 작업을 다시 시작해야합니다.
<batch:job id="transformJob"> <batch:step id="deleteDir" next="cleanDB"> <batch:tasklet ref="fileDeletingTasklet" /> </batch:step> <batch:step id="cleanDB" next="split"> <batch:tasklet ref="countThreadTasklet" /> </batch:step> <batch:step id="split" next="partitionerMasterImporter"> <batch:tasklet> <batch:chunk reader="largeCSVReader" writer="smallCSVWriter" commit-interval="#{jobExecutionContext['chunk.count']}" /> </batch:tasklet> </batch:step> <batch:step id="partitionerMasterImporter" next="partitionerMasterExporter"> <partition step="importChunked" partitioner="filePartitioner"> <handler grid-size="10" task-executor="taskExecutor" /> </partition> </batch:step> </batch:job>
전체 예제 코드 (Github).
희망이 도움이됩니다.
from https://stackoverflow.com/questions/18672776/spring-batch-multithreaded-processing-for-single-file-to-multiple-file by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring mongo 질의는 커스텀 타임 아웃을 설정한다. (0) | 2019.05.15 |
---|---|
[SPRING] 항아리를 실행할 때 스프링 부팅 DevTools 강제 실행 (0) | 2019.05.15 |
[SPRING] 웹 아키텍처 : MVC, 지연 초기화 (Lazy initialization), 데이터 전송 객체, 열린 세션보기에서 컨센서스 접근법이 있습니까? (0) | 2019.05.15 |
[SPRING] Sprint 부트 데이터 JPA : 'java.util.Set <javax.persistence.EntityManager>'유형의 유효한 bean이 없습니다. (0) | 2019.05.15 |
[SPRING] @EnableWs가 Spring 빈에서 aop 프록시를 제거한 이유 (0) | 2019.05.15 |