들어가기전 Batch Job 수행시 Step 실패하는 과정 첫번째 포스팅을 참고하자. https://devfunny.tistory.com/758 [SringBatch 실습] 3. Batch Job 수행시 Step 실패하는 경우 Job 생성 JobExecutionConfiguration.java import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.. devfunny.tistory.com Job 생성 StepExecutionConfiguration.java import lombo..
Tasklet 클래스 생성 CustomTasklet.java import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.repeat.RepeatStatus; public class CustomTasklet implements Tasklet { /** * 비즈니스 로직 구현 * @param stepContribution * @param chunkContext * @return * @th..
Job 생성 JobExecutionConfiguration.java 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.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.sp..
Job 생성 JobParameterConfiguration.java 파라미터를 출력하는 Job을 생성하자. import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.Step; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.configuration.annotation.JobBui..
SpringBatch 시작하기 HelloJobConfiguration import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; 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.JobBuilderFactory; import org.springframework.batch.core.configuration.annotatio..
기본개념 우선 ItemReader, ItemProcessor, ItemWriter 에 대해 간단하게 살펴보자. ItemReader 다양한 타입의 입력 데이터를 읽어오는 인터페이스로, 배치 수행의 대상이 될 데이터를 담는다. package org.springframework.batch.item; import org.springframework.lang.Nullable; public interface ItemReader { @Nullable T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException; } ItemProcessor ItemReader로 읽어온 데이터들을 가공하고 변환하는 과정을..
@JobScope와 @StepScope 개념 - 해당 어노테이션이 선언되면 생성이 어플리케이션 구동 시점이 아닌 빈의 실행 시점에 이루어진다. 스프링의 @Bean 어노테이션은 스프링이 초가화되는 시점에 빈이 생성된 후 관리된다. 스프링 배치에서 @JobScope, @StepScope 어노테이션은 어플리케이션이 실제로 실행되는 시점에 생성된다. - 스코프를 프록시 모드를 기본값으로 하기 때문에, 어플리케이션 구동 시점에는 빈의 프록시 객체가 생성되어 실행 시점에 실제 빈을 호출해준다. @JobScope - Step 선언시에 사용한다. - @Value : jobParameters, jobExecutionContext 만 사용 가능하다. @StepScope - Tasklet 이나 ItemReader, Item..
들어가며 SimpleJob, FlowJob 에서 각 STEP의 결과 상태값에 따라 BATCH_JOB_EXECUTION, BATCH_STEP_EXECUTION 테이블의 EXIT_CODE, STATUS 컬럼에 어떻게 셋팅되어지는지 확인해보자. 명칭 설명 STATUS (batchStatus) JobExecution, StepExecution의 속성 값으로, JOB, STEP의 최종 결과 상태를 가진다. EXIT_CODE (ExitStatus) JobExecution, StepExecution의 속성 값으로, JOB, STEP의 실행 이후 어떤 상태로 종료되었는지정의한다. SimpleJob package com.spring.batch.flowjob; import lombok.RequiredArgsConstruc..
Job 재실행 Job의 재실행에 대해서는 아래 포스팅을 참고하자. https://devfunny.tistory.com/680 SpringBatch 에서 JobInstance, JobExecution 의 관계 들어가기전 JobInstance, JobExecution 의 개념은 알고가자. https://devfunny.tistory.com/476?category=820618 [스프링배치] 잡의 실행 (JobLauncher, JobInstance, JobExecution, JobParameters) 잡의 실행 잡.. devfunny.tistory.com JOB을 재실행하면 FAILED 상태로 끝난 STEP만 실행 대상이 되는데, allowStartIfComplete(true)를 사용하여 COMPLETED로 끝..
기존 구현체 사용 스프링 배치는 동일한 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..
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/..
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..