제 2 장. Spring Batch 2.2의 새로운 특징
Spring Batch 2.2 release 은 6가지 주요 테마로 구성된다:
- Spring Data Integration
- Java Configuration
- Spring Retry
- Job Parameters
Spring Batch의 2.0 출시 이후, Spring Data project는 Spring에 NoSQL 동향에 대한 지원을 해왔다. Spring Batch 2.2 출시 버전에 Spring Data추상화를 통해 MongoDB, Neo4j, Gemfire의 네이티브 기능 가능하도록 지원했다.
이 2.2 버전은 사용자정의 Spring Data Repository를 사용자가 직접 작성할수 있는 기능도 지원했다. RepositoryItemReader와 RepositoryItemWriter는 각각 repository implementation (각각 PagingAndSortingRepository와 CrudRepository)를 감싸 영구 데이터와 데이터를 주고받는다.
버전 2.2.0이전에는 job을 설정하는 옵션은 수작업을 하거나 batch DSL(dsl파일)방식으로 XML설정밖에 없었다. 그러나 2.2.0버전에서 Job을 정의하는데 자바기반 설정이 추가되었다. 이 신규 설정옵션을 지원하기 위해 annotation과 builder클래스가 추가되었다. 다음은 이전에 정의하던 방식이다:
이젠 @EnableBatchProcessing annotation을 통해 설정가능하고 다음과 같이 JobBuilderFactory와 StepBuilderFactory를 통해 자바기반설정이 지원된다:
@Configuration
@EnableBatchProcessing
@Import(DataSourceCnfiguration.class)
public class AppConfig {
@Autowired
private JobBuilderFactory jobs;
@Bean
public Job job() {
return
jobs.get("myJob").start(step1()).next(step2()).build();
}
@Bean
protected Step step1() {
...
}
@Bean
protected Step step2() {
...
}
}
많은 공통클래스들이 @EnableBatchProcessing annotation을 참조하는데 기본적으로 autowiring이 가능하다. 이 공통클래스들은 JobRepsitory, JobLauncher, JobRegistry, PlatformTransactionManager,JobBuilderFactory, StepBuilderFactory 등이 있다. Job과 step을 새로운 자바 설정방식으로 설정하는 방법은 4.2절 “Java Config” 에 나와있다.
The ability to retry an operation via the RetryTemplate으로 한 동작을 재시도하는 기능은 원래부터Spring Batch의 특성이다. 하지만 이 기능은 예를 들어 통합Spring같은 다른 프레임웍에서는 아주 유용한 특성으로 인식되어 2.2.0버전 출시때, 이 재시도로직은Spring Retry라는 자체 라이브러리로 따로 분리되었다. 이 변경으로 2가지 주요 영향도가 발생했는데, 하나는 org.springframework.batch.retry 패키지를 대부분 신규 라이브러리로 옮긴것과, 패키지명에 “batch”를 뺀 org.springframework.retry로 바꿨다는 것이다.
Spring Batch의 2.2.0 출시이전에는 job execution으로 전달되는 인자가 job구분자값으로 사용되었다. 이 때문에 job 을 재실행하려면 인자 값이 변경될 수 없도록 한정되는 문제가 생겼다. 이 경우를 수용하기 위해 2.2.0은 job인자를 job구분자값으로 안 쓰도록 하는 방식을 들였다.
기본적으로 2.2.0에서 job 인자는 아직까지는 구분자값으로 쓰인다. 하지만, Spring
Batch는 이제부터 사용자가 인자를 job인스턴스구분에 안 써도 되도록 하고 있다. 이 변경사항을 지원하기 위해 batch의 도메인모델이 변경되었다. 2.2.0이전에는 job 인자값은 JobInstance와 관계를 맺었었다.
2.2.0이후부터는 , JobExecution과 관계를 맺는 것으로 변경되었다. 변경사항에 따라 job
repository의 database 스키마도 변경도 필요하다.원문