반응형
이번 시간에는 스프링 배치 구동 시 파라미터 입력과 파라미터 검증을 위한 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 주석을 풀어주세요 :)
잘못된 파라미터가 들어오면 위와 같은 예외가 발생하겠습니다.
반응형
'Programming > Spring Batch' 카테고리의 다른 글
[Spring Batch] 스프링 배치를 활용 하여 파일 읽기 (reader) (0) | 2022.04.11 |
---|---|
[Spring Batch] job, step 작업 전-후 확인을 위한 listener(리스너) (0) | 2022.04.07 |
[Spring Batch] 스프링 배치 테스트 코드 작성 (0) | 2022.04.01 |
[Spring Batch] 스프링 배치로 데이터를 읽고 쓰기 예제 (itemXXX 사용) (0) | 2022.03.31 |
[Spring Batch] 스프링 배치로 Hello, World 실행하기 예제 (tasklet 사용) (0) | 2022.03.29 |