Backend/Spring Batch
Spring Batch 운영
chjysm
2023. 5. 2. 13:51
JobExplorer( Job 실행 정보 )
- JobRepository 의 readOnly 버전
- 실행 중인 Job 의 실행 정보인 JobExecution 또는 Step 의 실행 정보인 StepExecution 을 조회할 수 있다.
[JobExplorer]
List<JobInstance> getJobInstances(String jobName, int start, int count) // start 인덱스부터 count만큼의 JobInstances을 얻는다.
JobExecution getJobExecution(Long executionId) // JobExecutionId 를 이용하여 JobExecutions 을 얻는다
StepExecution getStepExecution(Long jobExecutionId, Long stepExecutionId) // JobExecutionId 와 StepExecutionId 를 이용하여 StepExecution을 얻는다.
JobInstance getJobInstance(Long instanceId) // JobinstanceId를 이용하여 JobInstance를 얻는다
List<JobExecution> getJobExecutions(JobInstance jobInstance) // Jobinstance 를 이용하여 JobExecutions 들을 얻는다.
Set<JobExecution> findRunningJobExecutions(String jobName) // jobName을 이용하여 실행중인 Job의 JobExecution 들을 얻는다.
List<String> getJobNames() // 실행가능한 Job들의 이름을 얻는다
JobRegistry ( Job 정보 )
- 생성된 Job을 자동으로 등록, 추적 및 관리하며 여러 곳에서 job 을 생성한 경우 ApplicationContext 에서 job을 수집해서 사용할 수 있다.
- 기본 구현체로 map 기반의 MapJobRegistry 클래스를 제공한다.
- Key : JobName
- Value : Job
- Job 등록
- JobRegistryBeanPostProcessor – BeanPostProcessor 단계에서 bean 초기화 시 자동으로 JobRegistry에 Job을 등록 시켜준다
[JobRegistry]
// JobFactory 에 Job 을 등록한다
void register(JobFactory jobFactory)
// JobFactory 에 Job 삭제한다
void unregister(String name)
// Job을 얻는다
Job getJob(String name)
// jobName 들을 얻는다
Set<String> getJobNames()
JobOperator ( Job 작업 제어 )
- JobExplorer, JobRepository, JobRegistry, JobLauncher 를 포함하고 있으며
배치의 중단, 재시작, job 요약 등의 모니터링이 가능하다 - 기본 구현체로 SimpleJobOperator 클래스를 제공한다.
[JobOperator]
Set<String> getJobNames() // 실행가능한 Job들의 이름을 얻는다
int getJobInstanceCount(String jobName) // JobInstance 개수를 얻는다
List<JobInstance> getJobInstances(String jobName, int start, int count) //start 인덱스부터 count만큼의 JobInstances의 id들을 얻는다.
List<Long> getRunningExecutions(String jobName) // jobName을 이용하여 실행중인 Job의 JobExecutions의 id을 얻는다
Properties getParameters(long executionId) // Job의 Execution id를 이용하여 Parameters를 얻는다.
start(String jobName, Properties jobParameters) // Job 이름, Job Parameter를 이용하여 Job을 시작한다.
restart(long executionId, Properties restartParameters) // JobExecutionId 를 이용하여, 정지되었거나 이미 종료 된 Job 중 재실행 가능한 Job 을 재시작한다.
Long startNextInstance(String jobName) // 항상 새로운 Job 을 실행시킨다. Job 에 문제가 있거나 처음부터 재시작 할 경우에 적합하다
stop(long executionId) // JobExecutionId 를 이용하여, 실행 중인 Job을 정지시킨다.
// Stop 은 graceful 하게 동작한다. 즉 Stop이 즉시 이뤄지지 않으며 현재 실행중이던 step 은 끝까지 다 실행 된 후 job이 stop 된다
JobInstance getJobInstance(long executionId) JobExecutionId 를 이용하여 JobInstance 를 얻는다
List<JobExecution> getJobExecutions(JobInstance instance) // JobInstance를 이용하여 JobExecution 들을 얻는다.
JobExecution getJobExecution(long executionId) // JobExecutionId 를 이용하여 JobExecution 을 얻는다
List<StepExecution> getStepExecutions(long jobExecutionId) // JobExecutionId 를 이용하여 StepExecution 들을 얻는다
사용 예
@service
@RequiredArgsConstructor
public class JobService {
private final JobRegistry jobRegistry;
private final JobOperator jobOperator;
private final JobExplorer jobExplorer;
public String restart() throws Exception {
for( Iterator<String> iterator = jobRegistry.getJobNames().iterator(); iterator.hasNext();){
// job 정보 조회
SimpleJob job = (SimpleJob)jobRegistry.getJob(iterator.next());
// job 실행 정보 조회
JobInstance lastJobInstance = jobExplorer.getLastJobInstance(job.getName());
JobExecution lastJobExecution = jobExplorer.getLastJobExecution(lastJobInstance);
// job 작업 제어
jobOperator.restart(lastJobExecution.getId());
}
return "batch is restarted";
}
}
참조
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard