상황 스프링 배치가 진행중이다. 진행 도중에 오류가 발생했고, 실패한 시점부터 처리를 다시 시작해야한다. 이 경우에 스프링 배치는 실패한 시점을 어떻게 알아낼 수 있을까? 실패시마다, 사용자가 실행 상태를 재설정하는 일은 매우 번거롭고 어렵다. 스프링 배치가 이를 대신해준다. JobExecution 우리는 이미 JobExecution 에 대해 배웠다. https://devfunny.tistory.com/476?category=820618 [스프링배치] 잡의 실행 (JobLauncher, JobInstance, JobExecution, JobParameters) 잡의 실행 잡의 실행은 잡 러너 (Job Runner) 에서 시작된다. 잡 러너는 잡 이름과 여러 파라미터를 받아, 잡을 실행시킨다. 스프링 배치..
JobExecutionListener 해당 리스너를 통해 잡 리스너를 적용시킬 수 있다. JobExecutionListener는 2개의 메소드를 제공한다. beforeJob : 잡 생명주기에서 가장 먼저 실행된다. afterJob : 잡 생명주기에서 가장 나중에 실행된다. : 잡의 완료 상태에 관계 없이 호출된다. : 잡의 종료 상태에 따라 분기 처리를 할 수 있다. 구현방법 beforeJob, afterJob 메서드 모두 JobExecution 을 파라미터로 전달받아 실행된다. 여기서 JobExecution란, 스프링 배치 잡의 실제 실행을 의미한다. 잡을 구동할 때마다 매번 새로운 JobExecution 을 얻게된다. https://devfunny.tistory.com/476 [스프링배치] 잡의 실행..
ChunkContext public class HelloWorld implements Tasklet { private static final String HELLO_WORLD = "Hello, %s"; @Override public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { /** * StepContext 의 getStepExecutionContext 메소드가 존재 * : 잡의 ExecutionContext 의 현재 상태를 나타내는 Map를 반환한다. * 현재 값에 접근할 수 있지만, 반환된 Map 을 변경하더라도 실제 내용이 바뀌지 않는다. * 따라서 실제 Exec..
JobRepository 스프링 배치가 제공하는 여러 데이터베이스 테이블을 사용하여 배치 메타데이터를 저장한다. 총 6개의 테이블이 존재하는데, 각 테이블 정보에 대해 알아보자. BATCH_JOB_INSTANCE 테이블 잡을 식별하는 고유 정보가 포함된 잡 파라미터로 잡을 처음 실행하면 단일 JobInstance 레코드가 테이블에 등록된다. 필드 설명 JOB_EXECUTION_ID 테이블의 기본 키 VERSION oplimistic locking 에 사용되는 레코드 버전 JOB_NAME 실행된 잡의 이름 JOB_KEY 잡 이름과 잡 파라미터의 해시 값으로, JobInstance 를 고유하게 식별하는 데 사용되는 값 BATCH_JOB_EXECUTION 테이블 배치 잡의 실제 실행 기록을 나타낸다. 잡이 실..
잡의 실행 잡의 실행은 잡 러너 (Job Runner) 에서 시작된다. 잡 러너는 잡 이름과 여러 파라미터를 받아, 잡을 실행시킨다. 스프링 배치는 2가지 잡 러너를 제공한다. 1) CommandLineJobRunner 스크립트를 이용하거나 명령행에서 직접 잡을 실행할때 사용한다. 2) JobRegistryBackgroundJobRunner 스프링을 부트스트랩해서 기동한 자바 프로세스 내에서 Quartz 나 JMX 후크와 같은 스케줄러를 사용하여 잡을 실행할때 사용한다. JobRegistry 를 생성하는데 사용하는데, 이 JobRegistry는 스프링이 부트스트랩될 때 실행 가능한 잡을 가지고 있다. 3) JobLauncherCommandLineRunner CommandRunner 구현체는 별도의 구성이..
스프링부트 프로젝트 예제 package com.example.springbatch; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; i..
잡 (Job) 상태를 수집하고 이전 상태에서 다음 상태로 전환된다. 스텝 (Step) 스프링 배치에서 가장 일반적으로 상태를 보여주는 단위이다. 각 스텝은 잡을 구성하는 독립된 작업의 단위이다. 스텝에는 Tasklet, Chunk 기반으로 2가지가 있다. 1) Tasklet package org.springframework.batch.core.step.tasklet; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.repeat.RepeatStatus; import org.spri..
SpringBatch 사용을 위한 스프링 설정 (1) 의존성 추가 org.springframework.boot spring-boot-starter-batch (2) 스프링부트 Application 파일에 어노테이션 추가 @EnableBatchProcessing // 배치 사용을 위한 선언 @SpringBootApplication public class BatchApplication { public static void main(String[] args) { SpringApplication.run(BatchApplication.class, args); } } SpringBatch 의 Job 등록 import com.backend.batch.day01.dto.TempLibraryDto; import com...