Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 배치
- thread
- Java
- 디자인패턴
- java 정렬
- 알고리즘
- 생산자 소비자 패턴
- Parallel Old GC
- The law of Demeter
- zipkin
- Serial GC
- saga pattern
- 키클락
- MSA
- spring cloud
- 멀티스레드
- Spring Cloud Netfilx Eureka
- 디자인 패턴
- spring batch
- Transaction Pattern
- Resilinece4j
- TypeScript
- Spring Boot Actuator
- 체인 패턴
- JPA
- 스프링 배치
- 스레드
- Action Pattern
- 사가 패턴
- 타입스크립트
Archives
- Today
- Total
PSD( Private-Self-Development )
Spring Batch 운영 본문
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
'Backend > Spring Batch' 카테고리의 다른 글
Spring Batch 테스트 (0) | 2023.04.25 |
---|---|
Spring Batch 이벤트 리스너 (0) | 2023.04.24 |
Spring Batch 멀티 스레드 프로세싱 (0) | 2023.04.19 |
Spring Batch 반복 및 오류 제어 (0) | 2023.04.17 |
JobBuilder 와 StepBuilder 그리고 배치 상태 종류 (0) | 2023.03.15 |