반응형

이번 시간에는 스프링 배치 구동 시 파라미터 입력과 파라미터 검증을 위한 validator를 학습 하였습니다.

앞에서의 학습으로 인해서 조금 더 수월한 학습을 진행하였습니다.

job, step 그리고 tasklet을 활용하여 만든 배치를 살펴 보겠습니다.

private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;

@Bean
public Job advancedJob(Step advancedStep) {
    return jobBuilderFactory.get("advancedJob")
            .incrementer(new RunIdIncrementer())
            //.validator(new LocalDateParameterValidator("targetDate"))
            .start(advancedStep)
            .build();
}

@JobScope
@Bean
public Step advancedStep(Tasklet advancedTasklet) {
    return stepBuilderFactory.get("advancedStep")
            .tasklet(advancedTasklet)
            .build();
}

@StepScope
@Bean
public Tasklet advancedTasklet(
		@Value("#{jobParameters['targetDate']}") String targetDate) {
        
    return (contribution, chunkContext) -> {
        log.info("[AdvancedJobConfig] targetDate = " + targetDate);
        log.info("[AdvancedJobConfig] excuted advancedTasklet");
        
        return RepeatStatus.FINISHED;
    };

}

작업 내용이 없는 job으로써 배치가 수행만 되겠습니다. 그리고 tasklet에 보면 targetDate라는 파라미터를 입력 받는데요. 파라미터 추가를 위해서는 배치 작업 실행 시 다음 예시 처럼 파라미터를 추가를 해주시면 되겠습니다.

--spring.batch.job.names=advancedJob -targetDate=2022-02-07

targetDate라는 파라미터를 추가를 해주었습니다. 실행을 하면 스텝 내에서 파라미터 값을 받아 오신걸 확인 할 수 있습니다.

 

다음으로 파라미터 검증을 위한 validator을 만들어 보겠습니다.

public class LocalDateParameterValidator implements JobParametersValidator {

    private String parameterName;

    @Override
    public void validate(JobParameters parameters) throws JobParametersInvalidException {
        String localDate = parameters.getString(parameterName);

        if (!StringUtils.hasText(localDate)) {
            throw new JobParametersInvalidException(parameterName + "가 빈 문자열이거나 존재하지 않습니다.");
        }

        try {
            LocalDate.parse(localDate);
        } catch (DateTimeParseException e) {
            throw new JobParametersInvalidException(parameterName + "가 날짜 형식의 문자열이 아닙니다.");
        }
    }
}

validator을 활용하면 step 단계에서 파라미터를 검증 하는 것이 아닌, job 단계에서 배치 수행 전에 검증을 할 수 있습니다. 검증 작업은 빠른면 빠를 수록 좋겠습니다.

JobParametersValidator를 구현 해주시면 되겠습니다. 파라미터를 받고 파라미터의 대한 검증 코드를 작성해주세요.

그리고 Job 메서드에 validator을 등록해주시면 되겠습니다. 첫번째 코드에서는 validator 주석을 풀어주세요 :)

잘못된 파라미터가 들어오면 위와 같은 예외가 발생하겠습니다.

반응형

+ Recent posts