배치 프로세싱 프레임워크의 중요한 역할은 거대한 양의 데이터를 읽고, 비즈니스 로직에 맞춰 프로세싱 및 데이터 변환 작업을 하고 그 결과를 특정 저장 장치에 저장하는 것입니다.
Spring Batch는 이러한 작업을 위해 세 종류의 인터페스이를 제공합니다.: ItemReader, ItemProcessor, ItemWriter
이번 글에서는 위 세가지의 인터페이스의 개념에 대하여 알아 보도록 하겠습니다.
1. ItemReader
ItemReader는 여러 종류의 Input 리소스(파일, 데이터베이스)에서 데이터를 읽어 오는 수단을 제공합니다.
ItemReader 인터페이스 정의는 다음과 같습니다.
public interface ItemReader<T> {
T read() throws Exception, UnexpectedInputException, ParseException;
}
read() 메소드는 하나의 Item(아이템)을 리턴하고, 더이상의 읽을 아이템이 없는 경우에는 null을 리턴합니다.
(데이터가 없는 경우 Exception이 발생하지 않고 단순이 null 값이 리턴되는 점을 주목하시길 바랍니다.)
여기서 아이템은 파일 소스인 경우 파일의 한 라인의 데이터일수 있고, XML 파일에서는 하나의 element 값일 수 있습니다.
데이터베이스에서 읽어오는 경우에는 하나의 row가 아이템으로 표현될 수 있습니다.
다음은 자주 쓰이는 ItemReader의 구현체입니다.
2. ItemWriter
ItemWriter는 ItemReader 또는 ItemProcessor에 의해 넘겨지 데이터를 파일 또는 데이터베이스에 저장하는 역할을 합니다.
ItemWrtier 인터페이스 정의는 다음과 같습니다.
public interface ItemWriter<T> {
void write(List<? extends T> items) throws Exception;
}
write() 메소드에서 주목할 점은 하나의 아이템이 아닌 아이템 리스트를 받아 배치 처리된다는 점입니다. (itemReader 에서 commit-interval 수 만큼 리스트로 넘어옴)
다음은 자주 쓰이는 ItemWriter의 구현체입니다.
public interface ItemProcessor<I, O> {
O process(I item) throws Exception;
}
public class Foo {}
public class Bar {
public Bar(Foo foo) {}
}
public class Foobar{
public Foobar(Bar bar) {}
}
public class FooProcessor implements ItemProcessor<Foo,Bar>{
public Bar process(Foo foo) throws Exception {
//Perform simple transformation, convert a Foo to a Bar
return new Bar(foo);
}
}
public class BarProcessor implements ItemProcessor<Bar,FooBar>{
public FooBar process(Bar bar) throws Exception {
return new Foobar(bar);
}
}
public class FoobarWriter implements ItemWriter<FooBar>{
public void write(List<? extends FooBar> items) throws Exception {
//write items
}
}
<job id="ioSampleJob">
<step name="step1">
<tasklet>
<chunk reader="fooReader" processor="compositeProcessor" writer="foobarWriter"
commit-interval="2"/>
</tasklet>
</step>
</job>
<bean id="compositeItemProcessor"
class="org.springframework.batch.item.support.CompositeItemProcessor">
<property name="delegates">
<list>
<bean class="..FooProcessor" />
<bean class="..BarProcessor" />
</list>
</property>
</bean>
5. 예제2: Spring Batch Job HelloWorld - ItemReader,ItemProcessor,ItemWriter (0) | 2016.03.31 |
---|---|
4. 예제1: Spring Batch Job HelloWorld - In Memory Repository (0) | 2016.03.31 |
2. Understanding Job and Step Configuration in Spring Batch (0) | 2016.03.31 |
1. Spring Batch Basics (0) | 2016.03.31 |
스프링 배치 (0) | 2016.03.11 |
댓글 영역