일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- hadoop
- design pattern
- Storm
- Spring Batch
- DDD
- Spring
- apache storm
- Hbase
- elasticsearch
- 제주
- Domain Driven Design
- Angular2
- scala
- elastic search
- Clean Code
- Spring XD
- spark
- nginx
- 스프링 배치
- 도메인주도설계
- Linux
- hibernate
- SBT
- Gradle
- Spring Boot
- docker
- 엘라스틱서치
- intellij
- hdfs
- Java
- Today
- Total
욱'S 노트
Spring Batch - 작업정의 본문
Job은 step의 단순한 컨테이너처럼 보이는 반면에 개발자들이 반드시 알아야 할 많은 옵션들이 있다.
또한 작업을 어떻게 실행되는지 실행시 메타데이터가 어떻게 저장되는지에 대한 고려도 필요하다.
이번에는 job에 관련된 다양한 옵션과 실행시 고려사항에 대해서 설명한다.
작업 정의하기
Job 인터페이스에는 다양한 구현체들이 존재한다. 그러나 네임스페이스 추상화를 통해 정의의 차이점을 없애준다.
작업을 정의하기 위해서 단 세가지의 필수 요소(이름, jobRepository, step들)만이 필요하다.
다음 예제는 parent 정의를 사용하여 step들을 생성하기 위한 예제이다.
job-repository는 필수요소이지만, 암묵적으로 명시하지 않으면 jobReposity라는 id를 가진 빈을 참조한다.
<batch:job id="footballJob" job-repository="jobRepository">
<batch:step id="playerload" parent="s1" next="gameLoad"/>
<batch:step id="gameLoad" parent="s2" next="playerSummarization"/>
<batch:step id="playerSummarization" parent="s3"/>
</batch:job>
<batch:job id="footballJob" job-repository="jobRepository" restartable="false">
Intecepting Job Exectuion
작업이 실행되는 과정에 있어서 라이프사이클에 대한 이벤트를 통지받을 수 있다면 매우 유용한다.
SimpleJob은 적절한 시점에 jobListener을 호출하여 이러한 작업을 가능하게 한다.
/*
* Copyright 2006-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.core;
/**
* Provide callbacks at specific points in the lifecycle of a {@link Job}.
* Implementations can be stateful if they are careful to either ensure thread
* safety, or to use one instance of a listener per job, assuming that job
* instances themselves are not used by more than one thread.
*
* @author Dave Syer
*
*/
public interface JobExecutionListener {
/**
* Callback before a job executes.
*
* @param jobExecution the current {@link JobExecution}
*/
void beforeJob(JobExecution jobExecution);
/**
* Callback after completion of a job. Called after both both successful and
* failed executions. To perform logic on a particular status, use
* "if (jobExecution.getStatus() == BatchStatus.X)".
*
* @param jobExecution the current {@link JobExecution}
*/
void afterJob(JobExecution jobExecution);
}
<batch:job id="footballJob" job-repository="jobRepository" restartable="false">
<batch:step id="playerload" parent="s1" next="gameLoad"/>
<batch:step id="gameLoad" parent="s2" next="playerSummarization"/>
<batch:step id="playerSummarization" parent="s3"/>
<batch:listeners>
<batch:listener ref="sampleListener"/>
</batch:listeners>
</batch:job>
Inheriting from a Parent Job
작업의 그룹에서 비슷하게 공유할 수 있는 설정이 있다면 작업 정의에 대한 설정을 상속받아 사용할 수 있다.
상속받는 방식은 일반적인 스프링에서의 설정 상속과 동일하다.
<batch:job id="baseJob" abstract="true">
<batch:listeners>
<batch:listener ref="listenerOne"/>
</batch:listeners>
</batch:job>
<batch:job id="job1" parent="baseJob">
<step id="step1" parent="standaloneStep"/>
<batch:listeners merge="true">
<batch:listener ref="listenerTwo"/>
</batch:listeners>
</batch:job>
'Programming > Spring Batch' 카테고리의 다른 글
Spring Batch - 작업실행 (0) | 2015.01.22 |
---|---|
Spring Batch - JobRepository 구성하기 (0) | 2015.01.22 |
Spring Batch - 도메인 (0) | 2015.01.21 |
Spring Batch - 소개 (0) | 2015.01.16 |
Spring Batch - 시작하기 (0) | 2015.01.16 |