1. JobParameters란
- JobParameters는 스프링 배치에서 배치 작업 실행 시 전달되는 매개 변수들의 집합입니다.
- 배치 작업을 실행할 때마다 다른 설정값이나 데이터를 전달할 수 있도록 해주는 핵심 기능입니다.
- JobParameters는 Job 인스턴스를 구분하는 식별자 역할도 수행하며, 동일한 Job이라도 다른 JobParameters를 가지면 별개의 JobInstance로 처리됩니다.
- JobInstance를 다른 JobInstance와 구별시켜주는 것이 JobParameters라고 할 수 있습니다.
1.1 JobParameters의 필요성
- 배치 작업에서 실행할 때마다 다른 값을 전달해야 하는 경우가 많습니다.
- 예를 들어, 특정 날짜의 데이터만 처리하거나, 처리할 파일의 경로를 지정하는 등의 상황에서 JobParameters가 필요합니다.
- 또한 배치 작업의 재실행이나 실패 시 복구를 위해서도 JobParameters가 중요한 역할을 합니다.
2. JobParameters의 기본 구조
2.1 JobParameter 타입
- 스프링 배치 5.x에서는 기본적으로 7가지 타입의 편의 메서드를 제공합니다.
- STRING: 문자열 값을 저장
- LONG: 정수 값을 저장
- DOUBLE: 실수 값을 저장
- DATE: java.util.Date 타입의 날짜 값을 저장
- LocalDate: 날짜만 저장 (java.time.LocalDate)
- LocalTime: 시간만 저장 (java.time.LocalTime)
- LocalDateTime: 날짜와 시간을 저장 (java.time.LocalDateTime)
- 기본 7가지 타입 외에도
addJobParameter(String name, T value, Class<T> type)메서드를 통해 임의의 사용자 정의 타입을 JobParameter로 사용할 수 있습니다.
2.2 JobParameter의 속성
- identifying: JobInstance 식별에 사용되는지 여부를 결정하는 플래그
- value: 실제 파라미터 값
- type: 파라미터의 데이터 타입
팁
identifying 속성을 false로 설정하면, 해당 파라미터는 JobInstance 식별에 사용되지 않습니다. 이는 실행 시마다 변경되는 타임스탬프 같은 값에 유용합니다.
3. JobParameters 생성 방법
3.1 JobParametersBuilder 사용
JobParametersBuilder를 통한 생성
JobParameters jobParameters = new JobParametersBuilder()
.addString("inputFile", "/data/input.csv")
.addLong("processDate", 20241215L)
.addDouble("threshold", 0.95)
.addDate("executionTime", new Date())
.addLocalDate("targetDate", LocalDate.of(2024, 12, 15))
.addLocalDateTime("startTime", LocalDateTime.now())
.toJobParameters();
- JobParametersBuilder는 체이닝 방식으로 다양한 타입의 파라미터를 추가할 수 있습니다.
사용자 정의 타입 사용
// 임의의 타입을 JobParameter로 사용
MyCustomType customObject = new MyCustomType("data");
JobParameters jobParameters = new JobParametersBuilder()
.addJobParameter("customParam", customObject, MyCustomType.class)
.addJobParameter("enumParam", MyEnum.ACTIVE, MyEnum.class, true) // identifying
.toJobParameters();
- 제네릭 메서드를 사용하여 임의의 타입을 JobParameter로 사용할 수 있습니다.
identifying 속성 설정
JobParameters jobParameters = new JobParametersBuilder()
.addString("inputFile", "/data/input.csv", true) // identifying
.addDate("timestamp", new Date(), false) // non-identifying
.toJobParameters();
- 세 번째 파라미터로 identifying 여부를 설정할 수 있습니다.