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
- 황지연 님의 스프링배치
'Spring Batch' 카테고리의 다른 글
Scaling and Parallel Processing(With Spring Batch) (0) | 2023.05.20 |
---|---|
ExecutionContext (0) | 2022.04.02 |
Job, Step (0) | 2022.04.02 |
Spring Batch 메타 테이블 (0) | 2022.04.02 |
성능 평가 Async Step vs Multi-Thread Step vs Partition Step vs Parallel Step (0) | 2022.02.27 |