Job 구성 및 실행
Job이 어떻게 실행되고, 실행 중에 메타 데이터가 저장 되는 방법에 대한 많은 고려사항이 있다.
Job 설정
JobBuilderFactorySplit,Decision,Flow제공
재시작 가능성
JobBuilderFactory에서preventRestart()Job에서setRestartable(false)- 재시작이 불가능한 경우,
JobRestartException발생
JobExcution 가로채기
JobExecutionListener구현 (beforeJob(),afterJob())JobBuilderFactory에서listener()afterJob()은 성공/실패 여부와 관계 X@BeforeJob,@AfterJob
JobParametersValidator
- XML이나
AbstractJob의 서브 클래스를 이용하여 선택적으로JobParameter검증 DefaultJobParametersValidator- 인터페이스를 직접 구현 가능
JobBuilderFactory에서validator()
Java 설정
- Spring 3.0 (Spring Batch 2.2.0) 부터 기능 제공
- 설정을 위한 2가지 컴포넌트가 있다. (
@EnableBatchProcessing, 2가지 Builder) - 다양한
Bean생성(JobRepository,JobLauncher,JobRegistry,PlatformTransactionManager,JobBuilderFactory,StepBuilderFactory) - 설정 핵심 인터페이스는
BatchConfigurer이다.
JobRepository 설정
JobExecution와StepExecution의 다양한 영속성 도메인 객체에 대한 CRUD 오퍼레이션을 사용DataSource가 있다면 JDBC 기반 / 없다면Map기반- 커스터마이징을 위해
BatchConfigurer의createJobRepository()구현(dataSource, transactionManager 필수) - Sample Schema
JobRepository에 대한 Transaction 설정
- 설정이 잘 못 되었다면, repository는 transaction에 걸리지 않는다.
TransactionProxyFactoryBean를 이용하여 구현할 수 있다.
인메모리 Repository
- in-memory Map version의
JobRepository지원 - 동시에 실행된
JobInstance적합성 보장 X - test 환경에는
ResourcelessTransactionManager
비표준 데이터베이스 Repository
JobRepositoryFactoryBean에서setDatabaseType(auto-detect)- auto increament 등의 효과를 얻기 위해
incrementerFactory오버라이드 해야할지도 모른다.
JobLauncher 설정
- 대부분의
JobLauncher구현체는SimpleJobLauncher JobRepository필수JobLauncher- execute() -> Job -> Business Logic -> returningJobExecutionwith ExitStatus

SimpleJobLauncher에서 비동기처리:TaskExecutor
Job 실행
- 최소한의 요구사항:
JobLauncher, 실행될Job(같은 context이거나 아닐 수도 있다.)
Command Line에서 Job 실행
- 대부분의 경우 쉘 스크립트를 작성하여 시스템 프로세스를 동작
CommandLineJobRunner을 이용하여 애플리케이션 시작 시에 동작- arguments 제공(
jobPath: XML file 지정,jobName: 실행되는 job 이름) - os 레벨에서 성공 여부를 판별하기 위해
ExitCode상수를 제공
웹 컨테이너에서의 Job
Launcher는 비동기로 돌아간다.
많은 meta-data 방법
Repository 질의
JobExplorer는JobRepository의 읽기 전용 버전
JobRegistry
JobRegistry의 부모 인터페이스:JobLocator- 서로 다른 context에 존재하는 job을 중앙으로 수집하는데 유용
@EnableBatchProcessing에서 자동 등록JobRegistryBeanPostProcessor으로 커스텀
JobOperator
JobOperator는 다양한 디펜던시를 가지고 있다. (JobLauncher,JobRepository,JobExplorer,JobRegistry)
JobParametersIncrementer
startNextInstance는 항상 새로운Job을 만든다. (JobParametersIncrementer활용)Job에 문제가 있거나 처음부터 재시작하길 원할 때 유용jobBuilderFactory에서incrementer()
Job 중지
JobOperator에서 실행 중인JobExecution을 가져와서JobOperator.stop()을 활용 (즉시 종료 X)
Job 중단
FAILED은 재시작 가능,ABANDONED은 재시작 불가능(skip 됨)