PSD( Private-Self-Development )

Spring Batch 운영 본문

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