2009/01/05 13:14

Spring Batch 1.0에서 2.0으로 진화하기- 3. JobExecutionLisneter & 4. ItemProcessor

3. JobExecutionListener
먼저 1.x 리스너를 보면,
public interface JobExecutionListener {
   void beforeJob(JobExecution jobExecution);
   void afterJob(JobExecution jobExecution);
   void onError(JobExecution jobExecution, Throwable e);
   void onInterrupt(JobExecution jobExecution);
}

총 네 개의 메소드가 선언되어 있습니다.

2.x를 살펴보면,
public interface JobExecutionListener {
   void beforeJob(JobExecution jobExecution);
   void afterJob(JobExecution jobExecution);
}

두 개의 메소드로 줄었습니다.

1.x에 있던 onError()와 onInterrupt()는 afterJob() 내에서 별도의 로직으로 처리하도록 유도하고 있습니다.
사용자 삽입 이미지

Job 실행 후 여러 가지 상황에 대해서 API로 정의하지 않고, 단순화된 API 내에서 개별적으로 처리를 하도록 변경 됐습니다. API를 단순화하면서, 좀더 유연한 구조로 변경됐다고 생각됩니다. AOP의 개념으로 보자면 JoinPoint가 4개에서 2개로 줄어들게 됐습니다. 곰곰히 생각해보면 JoinPoint는 실제로 잡 실행 전과 실행 후 두 개가 맞습니다.

4. ItemTransformer ==> ItemProcessor
ItemTransformer는 클래스 이름이 ItemProcessor로 변경 됐습니다. 1.x를 학습하던 저도 이름이 부적절하다는 생각을 했었는데, 적절히 변경된 것 같습니다. 굳이 클래스의 역할을 '변환(Transform)'에만 종속 시킬 필요도 없으며, 실제로도 변환외에도 다른 여러 방향으로 사용하기 때문입니다.

다음 코드를 통해서 사용법에 대해서 감을 잡을 수 있을 것 같습니다.

사용자 삽입 이미지

클래스 이름을 변경함과 동시에 클래스의 역할과 위상에 대한 명확한 정의가 함께 이루어 졌습니다. ItemProcessor는 ItemReader/Writer와 동일한 수준에서 아이템 처리의 목적으로 사용함이 명확해졌습니다. 거기에 제네릭을 도입해서 타입 안정성까지 강화됐습니다.

사용자 삽입 이미지

참조: Spring Batch 2.0 Overview at Spring One America 2009 (Lucas Ward)
Trackback 0 Comment 0