이 게시글은 인프런 정수원님의 강의를 듣고 복습하며 정리한 글입니다. 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()라는 메서드를 이용할 수..
TaskLetStep의 StartLimit TaskLetStep의 StartLimit은 해당 Step이 실행할 수 있는 최대 횟수를 설정하는 것이다. Step은 기본적으로 실패할 경우 다시 실행할 수 있다. 또한 StartAllow 메서드를 이용해서 성공한 Step도 항상 재실행하도록 설정할 수 있다. TaskLetStep의 StartLimit는 이처럼 새로 시작할 수 있는 Step의 최대 실행횟수를 설정하는 것이다. @Bean public Step step1() { return stepBuilderFactory.get("step1") .tasklet((contribution, chunkContext) -> { System.out.println(">>> step1 has executed"); return..
Spring Batch, TaskletStep이란? TaskLetStep은 내부적으로 TaskLet을 가지는 객체다. TaskLet은 실제 일을 하는 객체이며, 쓰레드의 Runnable 인터페이스와 유사한 역할을 한다. TaskLetStep은 또 내부적으로 RepetableTemplate 객체를 가지는데, 이 객체를 통해 TaskLet을 기본적으로는 무한대로 반복하는 형태의 동작을 한다. TaskLetStep은 TaskLet 기반도 가능하지만, Chunk를 기반으로 가능하다. TaskLetStep은 기본적으로 무한히 반복하는 형태로 동작을 하는데, 단 한번만 동작하기 위해서는 TaskLet 객체를 반환할 때 RepeatStatus.Finished / null값을 반환하면 단 한번만 반복한다. TaskLe..