예전에 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를 추가해서 사용하면 되는거 아니냐..
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..
일전에 springboot base에서 File to DB Spring Batch 에 대한 예제를 포스팅했었다. 이번에는 DB to File Spring Batch에 대한 예제를 살펴보도록 하겠다. 대략적인 시나리오는 DB로부터 내용을 읽어서(JdbcCursorItemReader) 이 내용을 가공하고(Processor) File을 만들어(FlatFileItemWriter) 주는 시나리오이다. 간단한 테스트를 위해 H2 DB를 사용했으며 springboot의 version은 2.4.x이다. 그 외에 Spring Batch에 대한 기본 설정(datasource 등)은 되어 있어야 한다. H2 DB 삽입내용 INSERT INTO `BATCH_SAMPLE_EMPLOYEE` (`USER_ID`, `USER_NAM..
일전에 Spring Batch가 수행을 하다가 실패를 해도 Jenkins에서는 SUCCESS를 찍는 문제가 있다고 글을 쓴적이 있다. Jenkins Log Parser 사용해서 Application 오류 처리하기 엄청나게 편리한 Jenkins이지만 불편한점도 있다. 예를 들자면 Jenkins를 이용해 batch를 처리할때 분명 batch job은 내가 원하는대로 수행되지 않고 Error가 발생했는데 Jenkins job은 이를 Success 처리를 하 oingdaddy.tistory.com 이런 글인데 이것은 어플리케이션을 수행하고 성공이든 실패든 Jenkins의 Job은 SUCCESS로 출력을 하는데 이 과정의 로그를 분석하여 Jenkins의 Job의 상태를 변경해주는 방법이었다. 어떻게 보면 원칙적인..
Spring Batch에서 실행할때 넘겨주는 Parameter 값을 받아서 동적으로 처리를 하고 싶은 경우가 있다. Springboot Batch에서는 이렇게 Program Arguments를 이용해 jobParameters를 전달한다. 바로 이 값을 어떻게 Batch 코드에서 받을수 있을까에 대한 이야기를 해보려 한다. jobParameters도 기본적으로 값을 받을때 @Value("#{jobParameters[testKey]}") 이런 형식으로 값을 받아야한다. 그냥 코드에 딸랑 저것만 넣으면 안된다. 이걸 사용할 수 있게 해주는것이 바로 @StepScope, @JobScope이다. 이것의 뜻은 Step 실행시점에 bean이 생성이 되는것, 혹은 Job 실행시점에 bean이 생성이 되는것이다. 지난번..
Spring Batch의 기본적인 기능들을 지난 포스팅들을 통해 알아보았다. 이번에 알아볼 Skip/Retry도 Spring Batch에서는 기본적으로 제공을 하는 기능이다. 간단한 예제를 통해서 알아보자. us-500.csv (웹에서 쉽게 구할수 있음) Chunk Example을 볼때 잠깐 나왔었던 500 row의 csv 파일이다. 테스트를 위해 사용이 될 것이고 Chunk 방식의 Batch를 사용해 이 파일을 읽어서 가공하고 DB에 쓸 것이다. 테스트는 파일을 가공하는 단계(Processor)에서 강제로 오류를 내고 그것을 잘 skip하는지 또는 잘 retry 하는지 살펴볼것이다. 여기서는 일단 Art라는 사람과 Donette라는 사람이 있다는것 정도 알아두자. Spring Batch Skip Exa..
지난 글에서 다뤘던 Springboot Batch Chunk Example에서 소스들을 살펴 볼때 Listener도 살짝 나왔다. 우리가 정의한 Job이나 Step 실행 전 후로 필요한 공통 작업을 기술하기 위해 주로 사용되며 사용된다. 이전에 사용했던 그림에 추가적으로 listener를 붙여봤다. 조악하기 그지 없다. listener 자체가 이해하기 그렇게 어려운 개념은 아니기에 이정도 그림이면 이해를 할것이라고 생각한다.. Job Listener Job의 실행 전후에 처리해야 할 일이 있을때 작성을 한다. 사용방법은 다음과 같다. @Bean public Job sampleChunkJob(SampleJobListener jobListener, Step sampleChunkStep) { return jo..