예전에 Spring Batch 사용하면서 jobParameters를 주입받으려면 이렇게 하세요 하고 글을 쓴적이 있다. Spring Batch jobParameters 사용하는 방법 (with @JobScope, @StepScope) Spring Batch에서 실행할때 넘겨주는 Parameter 값을 받아서 동적으로 처리를 하고 싶은 경우가 있다. Springboot Batch에서는 이렇게 Program Arguments를 이용해 jobParameters를 전달한다. 바로 이 값을 어떻.. oingdaddy.tistory.com 이 글은 @JobScope와 @StepScope를 적절하게 사용해야 한다는 내용이 주된 내용이었다. 하지만 어느 프로젝트에서는 위와 같은 규칙을 잘 지켰는데도 불구하고 주입을 받..
독자적으로 스케쥴러에 의해 실행되는 Spring Batch Job이 있다. 결과물이 jar로 빌드되어져 나오고 스케쥴러가 그 jar를 실행시켜 우리가 만든 Batch Job이 수행된다. 하지만 이렇게 스케쥴러에 의해 돌아가는 Batch 외에 Web (Online)에서 Batch를 실행시키고 싶다는 요구사항이 있다. 이렇게 요구만 있으면 언제든지 실행시키는 Batch 방식을 On Demand Batch라 한다. 기본적으로 프로젝트를 하면 Online이 있고 Batch가 있다. 그래서 Online은 Online대로 돌고 Batch는 Batch대로 돈다. 그런데 Batch에서 수행하는 일을 Online에서도 원할 때가 있다. Online에도 Batch에서 사용한 Service를 추가해서 사용하면 되는거 아니냐..
Spring Batch를 실행할 때 ORA-08177: can't serialize access for this transaction (이 트랜잭션에 대한 직렬화 액세스를 할 수 없습니다) 오류가 발생하였다. 여러개의 Spring Batch Job이 하나의 JobRepository를 가지고 동시에 실행이 될 때 발생할 수 있는 문제이다. 이는 JobRepository 설정 중 transactionManager의 IsolationLevelForCreate 속성은 따로 지정하지 않을 경우 디폴트 값인 ISOLATION_SERIALIZABLE으로 설정되기 때문이다. 이를 ISOLATION_DEFAULT으로 변경하면 문제는 해결된다. 변경을 하는 방법은 다음과 같다. Java Config @Bean public..
이전에 Listener 관련 글을 쓰면서 JobListener와 StepListener에 대해 설정과 사용법에 대해 알아보았다. 여기에 추가적으로 ChunkListener에 대해서 알아보도록 하겠다. Job 안에 Step이 있고 Step 안에 Chunk가 있으니 앞서 본 것보다 더 작은 단위라고 이해하면 된다. ChunkListener 외에도 Step 하위에서 실행되는 Listener의 목록은 다음과 같다. Spring Batch는 이렇게 아주 작은 단위까지도 세밀하게 Listener를 넣을 수 있고 Control 할 수 있다. Chunk 단위로 잘 실행이 되는지 테스트를 하며 이 ChunkListener를 사용해 봤다. 물론 Chunk로 수행하는 Step이어야지 Tasklet은 ChunkListener..
일전에 Spring Batch의 Chunk 방식에 대해 공유를 한적이 있었다. [Spring Batch] Chunk Example (File to DB, Springboot based) Spring Framework의 개발환경이 Springboot 기반으로 변함에 따라 Spring Batch의 개발방식도 이전과는 많이 달라졌다. 필자가 전에 쓴 Spring Batch에 관한 글은 Springboot 기반이 아니라서 Batch Job을 작성하.. oingdaddy.tistory.com 이때 DB Writer는 JdbcBatchItemWriter 라는 것을 사용했었다. 이것은 단점이 있다. 바로 query 를 java 소스에 작성을 해야 하는 문제가 있다. 보기도 좋지 않고 관리도 좋지 못하다. 그래서 이런..
앞서 Spring Batch의 다음과 같은 샘플들을 구현해보았다. [Spring Batch] Partitioner Simple Example (Springboot based) [Spring Batch] Chunk Example (DB to File, Springboot based) [Spring Batch] Skip/Retry Simple Example (Springboot based) [Spring Batch] Parallel(병렬처리) Example (Springboot based) [Spring Batch] Tasklet Example (Springboot based) [Spring Batch] Listener Example (Springboot based) [Spring Batch] Chunk E..
[Spring Batch] Chunk Example (DB to File, Springboot based) [Spring Batch] Skip/Retry Simple Example (Springboot based) [Spring Batch] Parallel(병렬처리) Example (Springboot based) [Spring Batch] Tasklet Example (Springboot based) [Spring Batch] Listener Example (Springboot based) [Spring Batch] Chunk Example (File to DB, Springboot based) 앞에 Springboot 기반의 Batch에 대해 위와 같은 예제를 통해 알아보았다. 이번에는 Partiti..
Springboot 환경이 보편화가 되고 많은 부분들이 편해졌고 필자는 Batch가 엄청나게 편해진것 같다. 많이 사용해서 그런것 같다. 왜 Springboot Batch가 좋은지에 대해서는 이 글에서 다룬적이 있다. 그리고 빌드 및 실행방법에 대해서는 예전 xml config 기반의 Spring Batch 환경 구성하는 포스팅에서 다룬적이 있었지만 Springboot 기반의 환경에서는 어떻게 하는지 살펴보자. 아주 간단하다. 일단 빌드에 앞서 springboot의 main 클래스를 살펴보자. import java.util.ArrayList; import java.util.List; import org.springframework.batch.core.configuration.annotation.Enabl..