Spring Batch
  • 기존 구현체 사용 스프링 배치는 동일한 JobParameters 로는 성공한 Job의 재실행이 불가능하다고 했다. 하지만 Job을 여러번 수행시켜야하는 경우도 있으므로 해당 경우에 incrementer()을 사용한다. 기존 구현체인 RunIdIncrementer() 을 사용할 경우 run.id 를 key 값으로 value 가 1씩 증가하여 Job이 실행된다. 계속적으로 증가되는 파라미터가 존재하므로 다른 파라미터 값들은 동일하도 JobParameters 가 다르게 인식되어 재실행이 가능해진다. IncrementerConfiguration.java package com.spring.batch.job; import com.spring.batch.job.incrementer.CustomJobParameters..

    Read more
  • JobLauncherApplicationRunner - 스프링 배치 작업을 시작하는 ApplicationRunner 이고 ApplicationRunner의 구현체로, 어플리케이션이 정상적으로 구동되자마자 실행된다. - BatchAutoConfiguration 에서 생성된다. - 기본적으로 빈으로 등록된 모든 job을 실행시킨다. 사용자가 Job Name을 지정하여 실행시키고싶은 Job만 실행시킬 수 없을까? 예제코드 application.yml ... spring: batch: jdbc: # schema-mysql.sql 항상 실행 initialize-schema: always job: enabled: false # spring batch 자동실행 방지 names: ${job.name:NONE} Run/..

    Read more
  • jobLauncher - 배치 Job을 실행시키는 역할을 한다. - jobLauncher.run(job, jobParameter); 로직으로 배치를 수행한다. job, jobParameter 를 인자로 받아서 jobExecution을 결과로 반환한다. - 스프링 배치가 실행되면 jobLauncher 빈을 생성하고, jobLauncherApplicationRunner가 자동적으로 jobLauncher을 실행시킨다. 예제코드 JobLauncherConfiguration.java package com.spring.batch.job; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springf..

    Read more
  • StepContribution - chunk 프로세스의 변경 사항을 버퍼링한 후 StepExecution 의 상태를 업데이트하는 도메인 객체다. - BATCH_STEP_EXECUTION 테이블을 한번 확인하고 오자. https://devfunny.tistory.com/477?category=820618 스프링배치가 제공하는 배치 메타데이터 저장 테이블 (BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, BATCH_JOB_EXEC JobRepository 스프링 배치가 제공하는 여러 데이터베이스 테이블을 사용하여 배치 메타데이터를 저장한다. 총 6개의 테이블이 존재하는데, 각 테이블 정보에 대해 알아보자. BATCH_JOB_INSTANCE 테이블 devfunny.tistory.com..

    Read more
  • 들어가기전 지난 포스팅에서 JobExecution에 대해 알아보았다. 이를 먼저 인지한 후 StepExecution에 대해 알아보자. https://devfunny.tistory.com/680?category=820618 SpringBatch 에서 JobInstance, JobExecution 의 관계 들어가기전 JobInstance, JobExecution 의 개념은 알고가자. https://devfunny.tistory.com/476?category=820618 [스프링배치] 잡의 실행 (JobLauncher, JobInstance, JobExecution, JobParameters) 잡의 실행 잡.. devfunny.tistory.com 예제코드 StepExecutionConfiguration.ja..

    Read more
  • 들어가기전 JobInstance, JobExecution 의 개념은 알고가자. https://devfunny.tistory.com/476?category=820618 [스프링배치] 잡의 실행 (JobLauncher, JobInstance, JobExecution, JobParameters) 잡의 실행 잡의 실행은 잡 러너 (Job Runner) 에서 시작된다. 잡 러너는 잡 이름과 여러 파라미터를 받아, 잡을 실행시킨다. 스프링 배치는 2가지 잡 러너를 제공한다. 1) CommandLineJobRunner 스크립트를 devfunny.tistory.com 예제코드 JobExecutionConfiguration package com.spring.batch.job; import lombok.RequiredAr..

    Read more
  • SpringBatch DB 개인 공부 프로젝트용으로 springBoot의 내장되어있는 h2 DB를 사용하면 편하겠지만, 스프링 배치 프로젝트 특성상 데이터가 영구적으로 쌓일 수 있는 Oracle, Mysql 등을 사용해야한다. 아래 포스팅을 참고하여 Docker 의 Mysql 을 설치하자. https://devfunny.tistory.com/421

    Read more
  • 읽어올 파일 1. customerMultiFormat.csv CUST,Warren,Q,Darrow,8272 4th Street,New York,IL,76091 TRANS,1165965,2011-01-22 00:13:29,51.43 CUST,Ann,V,Gates,9247 Infinite Loop Drive,Hollywood,NE,37612 CUST,Erica,I,Jobs,8875 Farnam Street,Aurora,IL,36314 TRANS,8116369,2011-01-21 20:40:52,-14.83 TRANS,8116369,2011-01-21 15:50:17,-45.45 TRANS,8116369,2011-01-21 16:52:46,-74.6 TRANS,8116369,2011-01-22 13:51:05..

    Read more
  • 전체 코드 보기 package com.seohae.batch.batch.fileBatch1.job; import com.seohae.batch.batch.fileBatch1.entity.Customer; import com.seohae.batch.batch.fileBatch1.mapper.CustomerFieldSetMapper; import com.seohae.batch.batch.fileBatch1.mapper.CustomerFileLineTokenizer; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.batch.core.Job; import org.springfram..

    Read more
  • 잡의 재시작 방지 스프링 배치의 모든 잡은 실패하거나 중지될 때 다시 실행할 수 있었다. 스프링 배치는 기본적으로 이렇게 동작하므로 우리는 다시 실행하면 안되는 잡이 있을시 재시작을 방지해야한다. preventRestart() preventRestart() 메서드를 호출하여 잡이 실패하거나 어떤 이유로 중지된 경우에도 다시 실행할 수 없다. /** * 잡 실행 * @return */ @Bean public Job transactionJob() { return this.jobBuilderFactory.get("transactionJob") .preventRestart() /* 잡은 기본적으로 재시작이 가능하도록 구성되어있다. 잡의 재시작 방지 */ .start(...) .next(...) .build();..

    Read more
  • 스텝 실행 중 오류 던지기 스프링 배치는 예외가 발생하면 기본적으로 스텝 및 잡이 실패한것으로 간주한다. 따라서 아래 예제처럼 throw Exception 에 의해 잡은 FAILED(실패) 상태로 중지된다. 스프링 배치는 잡이 중지되면 현재 청크를 롤백하고, 성공적으로 완료한 작업까지 커밋하고, 재시작 시에는 중단됐던 부분을 찾아낸다. private Transaction process(FieldSet fieldSet) { if(this.recordCount == 25) { throw new ParseException("This isn't what I hoped to happen"); } ... } 오류를 던짐으로써 해당 스텝은 ExitStatus.FAILED 상태로 스텝이 완료되지 않았다. 실제로 예외가..

    Read more
  • StepExecution 스텝 중지 beforeStep 에서 StepExecution 을 가져온 다음, 이후 실행될 스텝에서 setTerminateOnly() 메서드를 사용한다. setTerminateOnly() 메서드를 호출하면, 스텝이 완료된 후 스프링 배치가 종료된다. 아래 예제처럼 if문의 조건에 충족하지 못할시 해당 스텝 완료 후 스프링 배치를 종료시킬 수 있다. public class TransactionReader implements ItemStreamReader { ... /** * afterStep 이 아닌 beforeStep 을 사용하도록 변경하여 StepExecution 을 가져온다. */ private StepExecution stepExecution; ... /* 스텝 빌드 전 s..

    Read more
  • 쿼츠 Quartz 쿼츠란, 오픈소스 스케줄러이다. 쿼츠는 자바 환경의 규모와 상관없이 사용이 가능하고 잡 실행에 유용한 스프링 부트 지원과 같이 오래전부터 스프링 연동을 지원하고있다. 쿼츠는 아래 3가지 컴포넌트를 제공한다. 1) 스케줄러 (Scheduler) : 스케줄러는 SchedulerFactory 를 통해서 가져올 수 있으며 JobDetails 및 트리거의 저장소 기능을 한다. 2) 잡 (Job) 3) 트리거 (Trigger) : 작업 실행 시점을 정의한다. : 트리거가 작동되어 쿼츠에게 잡을 실행하도록 지시하면, 잡의 개별 실행을 정의하는 JobDetails 객체가 생성된다. 스프링 배치 처리 쿼츠에서 잡과 JobDetails 객체를 정의하는 모델은 스프링 배치에서 잡과 JobInstance 를..

    Read more
  • 들어가기 스프링 부트는 CommandLineRunner, ApplicationRunner 라는 두가지 메커니즘을 이요해 실행 시 로직을 수행한다. 이 두 인터페이스는 ApplicationContext 가 리프레시(refresh) 되고, 애플리케이션이 코드를 실행할 준비가 된 이후에 호출되는 하나의 메서드를 가지고 있다. 스프링 부트를 스프링 배치가 함께 사용할때는 JobLauncherCommandLineRunner 라는 CommandLineRunner 가 사용된다. JobLauncherCommandLineRunner 스프링 배치의 JobLauncher 를 사용해 잡을 실행한다. 스프링부트가 ApplicationContext 내에 구성된 모든 CommandLineRunner 를 실행할때, 클래스 패스에 s..

    Read more
  • 잡의 종료 상태 스프링 배치의 잡은 종료 상태를 가진다. 잡 실행시 갖게되는 JobInstance 는 성공적으로 완료되면 두번 이상 실행될 수 없다. 이는 잡 이름과 파라미터로 식별된다. 만일 사용자가 프로그래밍 방식으로 잡을 종료한다면, 잡의 종료 상태를 알고 그에 따라 분기할 수 있어야한다. 잡의 종료 상태는 3가지이다. 1) Completed (완료) 2) Fail (실패) 3) Stopped (중지) 스프링 배치가 JobRepository 에 저장할 BatchStatus를 판별할때 스쳅의 ExitStatus 를 평가한다. ExitStatus 는 스텝, 청크, 잡에서 반환될 수 있다. BatchStatus 는 JobExecution 또는 StepExecution 내에 보관되고, JobReposito..

    Read more
  • Copyright 2024. GRAVITY all rights reserved