-
스프링 배치 도메인 이해 -JobRepositoryStudy/Spring Batch 2024. 2. 29. 06:48
JobRepository
1) 기본 개념
- 배치 작업 중의 정보를 저장하는 저장소 역할
- Job이 언제 수행되었고 언제 끝났으며, 몇 번이 실행되었고 실행에 대한 결과 등의 배치 작업의 수행과 관련된 모든 메타 정보를 저장한다.
- JobLauncher, Job, Step 구현체 내부에서 CRUD 기능을 처리한다.
2) 구조
3) JobRepository 메서드
- JobInstance 가 존재하는지 여부
- boolean isJobInstanceExists(String jobName, JobParameters jobParameters)
- Job 이 실행될 때 마다 JobExecution 생성
- JobExecution createJobExecution(String jobName, JobParameters jobParameters)
- 해당 Job의 실행 이력 중 가장 최근의 JobExecutioin 반환
- JobExecution getLastJobExecution(String jobName, JobParameters jobParameters)
- Job 의 실행정보 업데이트
- void update(JobExecution jobExecution)
- Step 의 실행정보 업데이트
- void update(StepExecution stepExecution)
- 실행 중인 해당 Step 의 새로운 stepExecution 저장
- void add(StepExecution stepExecution)
- Step 의 공유데이터 및 상태정보를 담고 있는 ExecutionContext 업데이트
- void updateExecutionContext(StepExecution stepExecution)
- Job 의 공유데이터 및 상태정보를 담고 있는 ExecutionContext 업데이트
- void updateExecutionContext(JobExecution jobExecution)
- 해당 Step의 실행 이력 중 가장 최근의 StepExecutioin 반환
- StepExecution getLastStepExecution(JobInstance jobInstance, String stepName)
4) JobRepository 설정
EnableBatchProcessing 어노테이션만 선언하면 JobRepository가 자동으로 빈으로 생선된다.
BatchConfigurer 인터페이스를 구현하거나 BasicBatchConfigurer를 상속해서 JobRepository 설정을 커스터마이징 할 수 있다.
- JDBC 방식으로 설정 : JobRepositoryFactoryBean
- 내부적으로 AOP 기술을 통해 트랜잭션 처리
- 트랜잭선 isolation의 기본 값은 SERIALIZEBLE로 최고 수준. 다른 레벨(READ_COMMITED, REPEATABLE_READ)로 지정 가능
- 배치는 많은 트래픽이 동시 접근하는 구조가 아니므로 엄격한 수준으로 isolation을 설정하더라도 괜찮다.
- 메타테이블의 Table Prefix를 변경할 수 있음. 기본값은 "BATCH_"
@Override protected JobRepository createJobRepository() throws Exception { JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); factory.setDataSource(dataSource); factory.setTransactionManager(transactionManager); factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE"); // isolation 수준, 기본값은 “ISOLATION_SERIALIZABLE” factory.setTablePrefix(“SYSTEM_"); // 테이블 Prefix, 기본값은 “BATCH_”, BATCH_JOB_EXECUTION 가 SYSTEM_JOB_EXECUTION 으로 변경됨 factory.setMaxVarCharLength(1000); // varchar 최대 길이(기본값 2500) return factory.getObject(); // Proxy 객체가 생성됨 (트랜잭션 Advice 적용 등을 위해 AOP 기술 적용) }
- In Memory 방식으로 설정 : MapJobRepositoryFactoryBean
- 성능 등의 이유로 도메인 오브젝트를 굳이 데이터베이스에 저장하고 싶지 않은 경우
- 보통 Test나 프로토타입의 빠른 개발이 필요할 때 사용
@Override protected JobRepository createJobRepository() throws Exception { MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean(); factory.setTransactionManager(transactionManager); // ResourcelessTransactionManager 사용 return factory.getObject(); }
'Study > Spring Batch' 카테고리의 다른 글
스프링 배치 실행 -배치 초기화 설정 (0) 2024.03.26 스프링 배치 도메인 이해 -JobLauncher (0) 2024.03.08 스프링 배치 도메인 이해 -ExecutionContext (0) 2024.02.29 스프링 배치 도메인 이해 -StepContribution (0) 2024.02.15 스프링 배치 도메인 이해 -StepExecution (0) 2024.02.15