이 강의는 인프런 정수원님의 강의를 수강하고 복습하며 작성한 글입니다. ItemReader ItemReader는 인터페이스고, 여러 구현체가 존재한다. 여러 구현체는 다양한 소스를 하나씩 읽어오는 기능을 구현해준다. ItemReader는 ChunkOrientedTasklet을 사용할 때, 필수적으로 설정해줘야한다. ItemReader가 읽어올 수 있는 소스는 다음과 같다. Flat 파일 : csv, txt XML,JSON DB JMS(Java Message Service), RabbitMQ와 같은 Messag Queuing 서비스 Custom Reader → 사용자 설정 Reader. 직접 구현 시, 멀티 스레드 환경에서 스레드에 안전하게 구현해야함. ItemReader의 메서드 ItemReader는 r..
이 게시글은 인프런의 정수원님의 강의를 듣고 복습하며 작성한 글입니다. ChunkOrientedTaskLet ChunkOrientedTaskLet은 Spring Batch에서 제공하는 TaskLet 인터페이스의 구현체다. 내부적으로 Chunk를 가지고 있어 Chunk 프로세스 처리가 가능하다. ChunkOrientedTaskLet은 내부적으로 ItemReader / ItemProcessor / ItemWriter를 가지고 있으며 이들이 Chunk 프로세스 처리를 해준다. 내부적으로는 Repeat Templeate을 가지고 있어, ChunkOrientedTasklet이 실행될 때 마다, 새로운 트랜잭션이 생성되어 처리가 이루어진다. 이 때, 트랜잭션 과정에 Exception이 발생하면 Roll Back이 ..
이 게시글은 인프런 정수원님의 강의를 듣고 복습하며 정리한 글입니다. Spring Batch의 Chunk Spring Batch에서 'Chunk'는 여러 개의 아이템을 묶은 하나의 덩어리를 지칭한다. 한번에 여러 개의 데이터를 입력 받아 Chunk로 만들고, Chunk 단위로 트랜잭션 내에서 데이터를 처리해준다. Chunk 단위로 데이터가 처리되기 때문에 Transaction의 Rollback, Commit은 모두 Chunk 단위로 이루어지게 된다. Chunk의 흐름도 Chunk의 큰 흐름도는 위와 같다. 여러 개의 Source를 1개씩 ItemReader가 불러와서 Input Chunk에 넣어준다. 이 때, Transaction이 시작된다. ItemReader는 ChunkSize만큼 Source에서 데..
Spring Batch : JobRepository SpringBatch는 DB 스키마를 통해 Job, Step의 실행 결과를 저장하기도 하고 실행에 필요한 여러 인스턴스들이 있다. 뿐만 아니라 이런 것들을 하기 위해서는 CRUD가 필수적이다. 이처럼 Spring Batch에서 사용하는 메타 정보들(DB 스키마 저장 정보)의 CRUD를 위한 클래스가 제공된다. 바로 JobRepository다. JobRepository는 배치 작업 중의 정보를 저장한다. JobRepository는 Job, Step 실행 정보의 CRUD 기능을 처리해준다. 위에서 볼 수 있듯이, JobRepository는 JobLauncher, Job, Step등에 CRUD를 해준다. 또한, DB랑도 연결이 되어있는데 이것은 결국 마지막 ..
TaskLetStep allowStartIfComplete TaskLetStep은 allowStartIfComplete라는 메서드를 지원한다. allowStartIfComplete를 설정하면, 이렇게 재설정된 TaskLetStep은 항상 재시작한다. 무슨 말인지 이해가 안될 수 있으니 좀 더 자세히 풀어서 적어보자. 한번 성공한 TaskLetStep은 동일한 JobInstance에서 다시 실행했을 때, 실행하지 않는다. 다시 실행되는 Step은 실패한 Step뿐이다. 그렇지만 이런 저런 이유로 인해 성공한 Step이라 반드시 다시 시작해야하는 경우(Validation Step 같은 것들)가 있다. 이런 Step들을 항상 다시 설정할 수 있게 AllowStartIfComplete()라는 메서드를 이용할 수..