Spring Batch - 17. JobParameters 검증 JobParametersValidator

출처

목차

JobParameters 검증 - JobParametersValidator

JobParametersValidator 릍 통한 JobParameters 검증은 Job 을 실행하기 전에 SimpleJobLauncher 내부에서 한번 Job 이 실행할때 SimpleJobL 에서 한번 총 두번의 Validation 을 진행한다.

public interface JobParametersValidator {

void validate(@Nullable JobParameters parameters) throws JobParametersInvalidException;
}

JobParametersValidator 기본 구현체 - DefaultJobParametersValidator

  • requiredKeys
    • JobParameter 에 필수적으로 포함되어야 할 Key
    • 필수 Key 가 없을 경우 JobParametersInvalidException 예외를 발생시킨다.
  • optionalKeys
    • JobParameter 에 선택적으로 포함되어야 할 Key
public DefaultJobParametersValidator(String[] requiredKeys, String[] optionalKeys) {
super();
setRequiredKeys(requiredKeys);
setOptionalKeys(optionalKeys);
}

@Override
public void validate(@Nullable JobParameters parameters) throws JobParametersInvalidException {

if (parameters == null) {
throw new JobParametersInvalidException("The JobParameters can not be null");
}

Set<String> keys = parameters.getParameters().keySet();

// optionalKeys 가 있을 경우에만 실행
if (!optionalKeys.isEmpty()) {
Collection<String> missingKeys = new HashSet<>();

// JobParameters Key 에 대한 검증을 한다.
for (String key : keys) {
if (!optionalKeys.contains(key) && !requiredKeys.contains(key)) {
missingKeys.add(key);
}
}

// JobParameters 로 넘어온 Key 가 requiredKeys 에도 optionalKeys 에도 없으면 JobParametersInvalidException 예외를 발생시킨다.
if (!missingKeys.isEmpty()) {
throw new JobParametersInvalidException(
"The JobParameters contains keys that are not explicitly optional or required: " + missingKeys);
}
}

Collection<String> missingKeys = new HashSet<>();

// requiredKeys 가 JobParameters Key 에 모두 포함이 됐는지 검증한다.
for (String key : requiredKeys) {
if (!keys.contains(key)) {
missingKeys.add(key);
}
}
if (!missingKeys.isEmpty()) {
throw new JobParametersInvalidException("The JobParameters do not contain required keys: " + missingKeys);
}

}
@Bean
public Job batchJob() {
return this.jobBuilderFactory.get("batchJob")
.start(step1())
.next(step2())
.next(step3())
.validator(new DefaultJobParametersValidator(new String[]{"name", "date"},new String[]{"count"}))
.build();
}

DefaultJobParametersValidator 흐름도

public class CustomJobParametersValidator implements JobParametersValidator {

@Override
public void validate(JobParameters jobParameters) throws JobParametersInvalidException {

if (jobParameters.getString("name") == null) {

throw new JobParametersInvalidException("name parameter is not found.");

}
}
}
Share