이전에 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 소스에 작성을 해야 하는 문제가 있다. 보기도 좋지 않고 관리도 좋지 못하다. 그래서 이런..
일전에 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의 기본적인 기능들을 지난 포스팅들을 통해 알아보았다. 이번에 알아볼 Skip/Retry도 Spring Batch에서는 기본적으로 제공을 하는 기능이다. 간단한 예제를 통해서 알아보자. us-500.csv (웹에서 쉽게 구할수 있음) Chunk Example을 볼때 잠깐 나왔었던 500 row의 csv 파일이다. 테스트를 위해 사용이 될 것이고 Chunk 방식의 Batch를 사용해 이 파일을 읽어서 가공하고 DB에 쓸 것이다. 테스트는 파일을 가공하는 단계(Processor)에서 강제로 오류를 내고 그것을 잘 skip하는지 또는 잘 retry 하는지 살펴볼것이다. 여기서는 일단 Art라는 사람과 Donette라는 사람이 있다는것 정도 알아두자. Spring Batch Skip Exa..
지난 포스팅으로 Chunk 방식과 Tasklet 방식의 Spring Batch에 대해 알아보았다. 이제는 이 방식을 조금 응용하여 이를 병렬처리하는 방법에 대해 알아보겠다. Chunk와 Tasklet과 마찬가지로 이것도 매우 직관적이라 이해가 쉬울 것이다. SampleParallel.java import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import o..
Chunk 방식은 정형화된 방식이라면 Tasklet 방식은 비교적 자유로운 방식이다. 따라서 실제로 batch를 사용할때 적어도 내가 경험해본 프로젝트에서는 Tasklet 방식을 훨씬 선호하였다. 이것도 Chunk와 마찬가지로 전에 Xml Config 방식으로 어떻게 사용하는지 살펴본적이 있는데 Springboot 기반의 Batch에서는 어떻게 사용을 하는지 알아보자. batch application 구조를 어떻게 잡느냐에 따라 Tasklet을 작성하는 방법은 다양하게 변할 수 있다. (Tasklet 내부를 작성하는건 동일하다. 표현법만 다를 뿐이다..) 필자는 크게 두가지 방법으로 구성을 해봤는데 Job 구성 클래스 외부에 tasklet 클래스를 만들어서 참조하는 방식이 있다. 이것은 tasklet 클..
지난 글인 File to File 예제를 통해 어떤것이 Chunk 지향적인것인지 간단히 알수 있었다. Spring Batch Chunk Example (1) - File to File (with FlatFileItemReader, FlatFileItemWriter) 현재까지 진행한 대부분의 프로젝트는 복잡하기도 하고 상황에 맞지 않아(WebService, EAI 연동 등) Spring Batch에서 일반적으로 사용하고 있는 chunk 방식 대신에 tasklet을 이용하여 사용하였다. tasklet을 oingdaddy.tistory.com DB to DB는 File to File에서 기본적인것은 충분히 언급을 했으므로 바로 예제로 들어가겠다. context-batch-job-db2db.xml ... 생략 ..
현재까지 진행한 대부분의 프로젝트는 복잡하기도 하고 상황에 맞지 않아(WebService, EAI 연동 등) Spring Batch에서 일반적으로 사용하고 있는 chunk 방식 대신에 tasklet을 이용하여 사용하였다. tasklet을 이용한다면 하나의 자바 메소드 안에 내가 필요한 내용만을 쭉 기술해서 사용하면 되므로 Spring Batch에 대한 개념이 없어도 쉽게 접근이 가능하다. 하지만 Spring Batch에서 일반적으로 사용되고 또 권고하는 chunk 방식이 더욱 강력한 성능을 가지고 있기에 공부를 더 하고 이를 활용한 개발방식의 변화도 필요하다. 그래서 Spring Batch를 사용하며 이론적으로는 많이 들었던 개념인 chunk (file2file, file2db, db2file, db2d..