Programing/Java & Spring

세무민의 코딩일기 : Spring Batch JobParameterVaildator

세기루민 2023. 11. 28. 08:45
728x90

 

안녕하세요.

세기무민입니다.

 

이번에 다뤄볼 포스팅은 JobParameterVaildator에 대한 내용을 다뤄보려고 합니다.

 

1. JobParameterVaildator?

 

Job 실행에 꼭 필요한 JobParameter에 대한 검증하는 용도로 사용됩니다.

기본적으로  DefaultJobParametersValidator 을 제공하지만 직접 인터페이스를 구현하여 사용하는 방법도 있습니다.

 

 

2.JobParameterVaildator 사용 이유?

Scheduler로 실행시켜서 작동하는 케이스에 대해서는 Vaildation을 하지 않아도 무관하다고 생각됩니다.

다만, Controller 혹은 Jenkins로 처리하는 케이스와 같이 직접 파라미터를 전달하는 케이스에 대해서는

문제 없이 유효한 값들이 전달 되었는지 검증이 필요하여 사용됩니다.

 

3.코드

JobParameterType

@Getter
public enum JobParameterType {
    PARAMETER_DATE("Date"),
    PARAMETER_SCHEDULER_NAME("schedulerName");
    
    private final String value;
    
    JobParameterType(String value) {
    	this.value = value;
    }
}

 

JobParameterType에 대한 Enum 값을 생성한다. 

parameter 구성에 대해서는 서비스마다 다르게 넣을수도 있고 공통적으로 관리하는 케이스도 있기 때문에

주어진 환경에 따라 Enum으로 구성하면 된다.

 

 

JobParameterVaildatorUtils

public class JobParameterVaildatorUtils implements JobParametersValidator {

	/**
	*JobParameter필수값을체크한다.
	*-추후Controller호출을했을경우정상적으로Parameter가넘어왔는지체크후Job실행을위함
	**/
	@Override
	public void validate(JobParametersparameters) throwsJobParameters InvalidException{
	if(parameters==null){
		throw new JobParametersInvalidException("parameters is null");
	}
	else{
		if(StringUtils.isEmpty(parameters.getString(JobParameterType.PARAMETER_DATE.getValue()))
		||StringUtils.isEmpty(parameters.getString(JobParameterType.PARAMETER_SCHEDULER_NAME.getValue()))){
			throw new JobParametersInvalidException("parameters is invalid");
			}
		}
	}
}

 

나의 경우 JobParameter로 시작일자와 스케줄이름을 담아서 Job을 실행하기 때문에 위와 같이 유효성 검증을 처리한다.

실제 JobParameter가 Null이거나 정해진 파라미터값이 들어오지 않았을 경우 예외처리를 진행한다.

 

 

testJob

@Lazy
@Bean(name=Constants.DUMMY_JOB)
public testJob(){
	return jobBuilderFactory.get(Constants.DUMMY_JOB)
		.validator(new JobParameterVaildatorUtils())
		.start(dummyStep.getDummyListStep())
		.build();
}

 

Job을 실행할 때 validator를 이용하여 검증을 처리하면 된다. 

만약 커스텀을 하지 않고 기본적으로 지원해주는 유효성 검증을 이용하기 위해서는

JobParameterVaildatorUtils -> DefaultJobParametersValidator로 변경해주면 된다.

 

4.결과

유효성 검증에 문제가 발생하지 않을 경우 Job이 실행된다.

그렇지만 위의 이미지와 같이 파라미터에 대한 값 혹은 파라미터가 정상적으로 전달되지 않았을 경우

유효성 검증에 따라 처리된다.

728x90