package kr.xit.core.biz.batch;

import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.support.RunIdIncrementer;

/**
 * <pre>
 * Spring Boot 2.0.x에서 발생하는 버그
 * => 배치 Job이 실패할 경우 이후에 파라미터를 변경해도 계속 실패한 파라미터가 사용
 *    Spring Boot 2.1.0 이상부터는
 *    => Job 실행시 사용한 파라미터중 하나가 다음 실행시 누락되면 누락된 파라미터를 재사용 한다
 *    --> 넘어온 파라미터와 run.id만 사용하도록 강제 하도록 변경
 *        .incrementer(new RunIdIncrementer())
 *        -> .incrementer(new UniqueRunIdIncrementer())
 *
 * packageName : kr.xit.core.biz.batch
 * fileName    : CustomRunIdIncrementer
 * author      : limju
 * date        : 2023-05-16
 * ======================================================================
 * 변경일         변경자        변경 내용
 * ----------------------------------------------------------------------
 * 2023-05-16    limju       최초 생성
 *
 * </pre>
 */
public class CustomRunIdIncrementer extends RunIdIncrementer {
    private static final String RUN_ID = "run.id";

    @Override
    public JobParameters getNext(JobParameters parameters) {
        JobParameters params = (parameters == null) ? new JobParameters() : parameters;
        return new JobParametersBuilder()
            .addLong(RUN_ID, params.getLong(RUN_ID, 0L) + 1)
            .toJobParameters();
    }
}

