Study/Spring Batch

스프링 배치 실행 -incrementer()

공29 2024. 4. 11. 07:48

1) 기본 개념

  • JobParameters 에서 필요한 값을 증가시켜 다음에 사용될 JobParameters 오브젝트를 리턴
  • 기존의 JobParameter 변경없이 Job 을 여러 번 시작하고자 할때
  • RunIdIncrementer 구현체를 지원하며 인터페이스를 직접 구현할 수 있음

 

2) 구조

 

3) 설정

3-1) CustomJobParametersIncrementer 구현

    @Bean
    public Job batchJob() {
        return this.jobBuilderFactory.get("batchJob")
                .incrementer(new CustomJobParametersIncrementer())
                .start(step1())
                .next(step2())
                .next(step3())
                .build();
    }
public class CustomJobParametersIncrementer implements JobParametersIncrementer {

    static final SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-hhmmss");

    public JobParameters getNext(JobParameters parameters) {

        String id = format.format(new Date());

        return new JobParametersBuilder().addString("run.id", id).toJobParameters();
    }
}

 

JobParametersIncrementer 인터페이스의 getNext 메서드를 구현한다.

기존의 JobParameters의 변경 없이, 실행할 때마다 값이 변경되는 run.id를 추가하여 재시작가능하도록 한다.

3-2) RunIdIncrementer

    @Bean
    public Job batchJob() {
        return this.jobBuilderFactory.get("batchJob")
                .incrementer(new RunIdIncrementer()) // Spring에서 기본 제공
                .start(step1())
                .next(step2())
                .next(step3())
                .build();
    }

Spring에서 기본 제공하는 RunIdIncrementer을 사용해도 된다.

public class RunIdIncrementer implements JobParametersIncrementer {
    // 코드 생략...
    public JobParameters getNext(@Nullable JobParameters parameters) {
        JobParameters params = parameters == null ? new JobParameters() : parameters;
        JobParameter runIdParameter = (JobParameter)params.getParameters().get(this.key);
        long id = 1L;
        if (runIdParameter != null) {
            try {
                id = Long.parseLong(runIdParameter.getValue().toString()) + 1L;
            } catch (NumberFormatException var7) {
                throw new IllegalArgumentException("Invalid value for parameter " + this.key, var7);
            }
        }

        return (new JobParametersBuilder(params)).addLong(this.key, id).toJobParameters();
    }
}

id 값을 1씩 증가시켜 재시작되도록 하는 로직이다.