Step을 확장하기 위해 가장 먼저 생각나는 확장포인트는 AbstractStep 일것이다. 하지만 이녀석을 확장한다면 스프링 배치의 스텝을 사용하지 않는것과 같다. 왜냐하면 스텝의 중요한 기능들은 ItemOrientedStep에서 구현하고 이녀석은 AbstractStep 을 확장한 것이기 때문이다.
두번째로는 AbstractStepFactoryBean이 있다. 이녀석을 확장하는것 역시 AbstractStep을 확장하는것과 별반 다르지 않다.

그렇다면 ItemOrientedStep을 확장해야 하는가? 그것또한 쉽지않다. ItemOrientedStep만으로는 skip정책과 retry 정책등과 같은 필수적인 기능들을 제공하지 않기 때문이다. 이러한 정책들은 AbstractStepFactoryBean을 상속한 SimpleStepFactoryBean과 또 이 클래스를 상속한 SkipLimitStepFactoryBean에서 세팅해준다.

이쯤에서 드는 생각은 ItemOrientedStep과 SkipLimitFactoryBean을 확장하면 될것같다는 생각이 들것이다. 하지만 이것또한 답은 아닌것 같다 왜냐하면  AbstractStepFactoryBean은 FactoryBean 인터페이스를 구현한다. 그런데  AbstractStepFactoryBean에서 구현한 getObject메소드를 final로 막아버렸다. 그래서 SkipLimitFactoryBean을 확장한다고 해도 ItemOrientedStep을 확장한 스텝을 생성할 수가 없다

이쯤에서 한번 생각해볼 문제가 왜 데이브는 getObject메소드를 오버라이딩 하지 못하게 막았을까하는 점이다. 분명 우리보다 뛰어난 사람일 텐데 그렇게 한 이유가 분명히 있을것이다

여기까지가 저번주 목, 금 이틀동안 삽질한 결과이다. 답은 전혀다른 곳에 있었다. 생각을 유연하게 하고 기술에 얽매이지 않으면 답이 보일것이다.
무지 단순한 소스지만 내 스스로 만들어본 첫번째 스프링 배치 프로그램이다.
파일로부터 데이터를 읽어서 다른 파일에 기록하도록 작성했다.
이 작업을 위해 domain객체, fieldSetMapper객체, fieldSetCreator, 로깅을 위한 advice 만 구현하면된다. 물론 비즈니스 로직이 없어서 간단할 수도 있겠지만..

jobRepository로 디비를 사용하지 않고 메모리를 사용하고 싶었다. 이에 대한 내용이 레퍼런스에 나온다.
 
<bean id="jobRepository" class=".....MapJobRepositoryFactoryBean">

이렇게 설정하면 된단다. 근데 이렇게 하면 에러난다. transactionManager가 필수란다. 결국 트랜잭션 매니저를 설정했다.

<bean id="jobRepository" class="......MapJobRepositoryFactoryBean"
p:transactionManager-ref="transactionManager"
lazy-init="true" autowire-candidate="false" />

MapJobRepositoryFactoryBean 내부를 보면 repository로 맵을 이용하는데 트랜잭션 매니저는 왜 필요한것인지..
어렵다
spring batch 다운로드 : http://static.springframework.org/downloads/nightly/release-download.php?project=BATCH

1. 다운받은후 압축을 풀면 samples/spring-batch-samples 디렉토리에 샘플코드가 있다.

2. maven을 이용하여 이클립스 프로젝트를 생성한다.

2.1 커맨드 창에서 samples/spring-batch-samples 디렉토리로 이동한다.

2.2 mvn eclipse:eclipse 를 치면 이클립스 환경파일들이 생성되고 .classpath에 라이브러리들도 셋팅이 된다.

3. 이클립스에서 환경정보를 셋팅해야 한다. .classpath에서 라이브러리들을 셋팅할 때 사용되는 변수가 M2_REPO를 참조하도록 되어있기 때문이다.

4. 여기까지 완료되면 테스트 프로그램을 실행시켜 각 예제를 수행해 볼 수 있다.

샘플을 설치하는 중에 maven을 처음 사용해봐서 삽질 좀 했다. 먼저 이클립스 프로젝트를 생성하는 명령어를 몰라서 헤매고 repository가 어디에 생성되는지 몰라서 한참을 찾아 헤맸었다. 명령어는 위에서 적었고 repository는 maven home/conf/settings.xml에서 <localRepository>repository 경로</localRepository> 를 설정해서 해결했다 이값을 설정하지 않을경우에 나같은 경우는 C:\Documents and Settings\Administrator\.m2\repository 이 위치가 repository 경로로 되었다

+ Recent posts