모르지 않다는 것은 아는것과 다르다.

Spring Batch

JobParameterValidator

채마스 2022. 4. 2. 11:13

JobParameterValidator

  • JobParameterValidator를 사용해서 Job 파라미터를 validation 처리할 수 있다.
  • 만약 Job 파라미터로 날짜값이 전달 될때, 날짜 형식의 파라미터 맞는지 validation 처리해 보는 코드를 구현해 보자
  • 먼저 아래와 같이 날짜 형식이 맞는지 검사하는 Validator를 구현한다.
@AllArgsConstructor
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 + "가 날짜 형식의 문자열이 아닙니다.");
        }
    }
}
  • JobParametersValidator를 구현해서 Validator 를 작성할 수 있다.
  • 날짜 형식이 아닐 경우, DateTimeParseException 이 반환한다.
@Bean
public Job advancedJob(JobExecutionListener jobExecutionListener,
                        Step advancedStep) {
    return jobBuilderFactory.get("advancedJob")
            .incrementer(new RunIdIncrementer())
            .validator(new LocalDateParameterValidator("targetDate"))
            .listener(jobExecutionListener)
            .start(advancedStep)
            .build();
}

  • 위와 같이 날짜형식으로 파라미터를 넘기면 정상적으로 작동하지만, 아래와 같이 파라미터를 날짜형식으로 넘기지 않으면 위에서 설정한
    예외가 발생한다.

 

CompositeJobParametersValidator

  • 두 개 이상의 validator를 묶어서 CompositeJobParametersValidator를 형성할 수 있다.
private JobParametersValidator userJobParametersValidator() {
    CompositeJobParametersValidator validator = new CompositeJobParametersValidator();
    validator.setValidators(Arrays.asList(
            new YearMonthParameterValidator(),
            new FilePathParameterValidator()
    ));

    return validator;
}
  • 위와 같이, 두 개의 validator를 묶어서 하나의 CompositeJobParametersValidator를 형성했다.




REFERENCES

  • 황지연 님의 스프링배치