Appendix A: List of ItemReaders and ItemWriters

A.1. Item Readers

Table 19. 사용 가능한 아이템 리더(reader)

아이템리더설명스레드 세이프 여부(Thread-safe)
AbstractItemStreamItemReader아이템스트림(ItemStream)아이템리더(ItemReader) 인터페이스와 결합하는 기본 추상 클래스이다.Yes
AbstractItemCountingItemStreamItemReader아이템리더(ItemReader)에서 반환된 아이템 수를 계산하여 기본적인 재시작 기능을 제공하는 추상 기본 클래스이다.No
AbstractPagingItemReader기본 페이징 기능을 제공하는 기본 추상 클래스이다.No
AbstractPaginatedDataItemReader스프링 데이터의 페이징 기능을 기반으로 기본 페이징 기능을 제공하는 기본 추상 클래스이다.No
AggregateItemReader리스트를 아이템으로 전달하는 아이템리더(ItemReader)는 주입된 아이템리더(ItemReader)의 객체를 컬렉션으로 변환할 준비가 될 때까지 저장한다. 이 클래스는 레코드 경계를 식별할 수 있는 커스텀 아이템리더(ItemReader)에 대한 래퍼로 사용되어야 한다. 커스텀 리더(reader)는 쿼리 메소드(isHeader()isFooter())에 true로 응답하는 애그리거트아이템(AggregateItem)을 반환하여 레코드의 시작과 끝을 표시해야 한다. 이 리더(Reader)는 스프링 배치에서 제공하는 리더 라이브러리의 일부가 아니지만, spring-batch-samples의 샘플로 제공된다.Yes
AmqpItemReader스프링 Amqp템플릿(AmqpTemplate)이 주어지면, 동기(synchronous) receive 메서드를 제공한다. receiveAndConvert() 메서드를 사용하면 POJO 객체를 수신할 수 있다.Yes
KafkaItemReader아파치 카프카 토픽(topic)에서 메시지를 읽는 아이템리더(ItemReader)이다. 동일한 토픽(topic)의 여러 파티션에서 메시지를 읽도록 구성할 수 있다. 이 리더(reader)는 재시작 기능을 지원하기 위해 익스큐션 컨텍스트에 메시지 오프셋(message offsets)을 저장한다.No
FlatFileItemReader플랫 파일에서 읽는다. 아이템스트림(ItemStream)스킵(Skippable) 기능을 포함하고 있다. “FlatFileItemReader”를 참고하자.No
HibernateCursorItemReaderHQL 쿼리를 기반으로 커서에서 읽는다. Cursor-based 아이템리더(ItemReader)를 참고하자.No
HibernatePagingItemReader페이징된 HQL 쿼리에서 읽는다.Yes
ItemReaderAdapter아이템리더(ItemReader) 인터페이스에 모든 클래스를 적용한다.Yes
JdbcCursorItemReaderJDBC를 통해 데이터베이스 커서에서 읽는다. Cursor-based 아이템리더(ItemReader)를 참고하자.No
JdbcPagingItemReaderSQL 문이 주어지면, 메모리 부족 없이 큰 데이터를 읽을 수 있도록 로우을 페이징 처리한다.Yes
JmsItemReader스프링 Jms오퍼레이션(JmsOperations) 객체와 오류를 보낼 JMS 대상 또는 대상명이 주어지면 주입된 JmsOperations#receive() 메서드를 통해 수신된 아이템을 제공한다.Yes
JpaCursorItemReaderJPQL 쿼리를 실행하고 반환된 결과 집합을 반복한다.No
JpaPagingItemReaderJPQL 쿼리가 주어지면 메모리 부족 없이 대규모 데이터세트를 읽을 수 있도록 로우를 페이징처리한다.Yes
ListItemReader리스트의 아이템을 한 번에 하나씩 제공한다.No
MongoItemReader몽고오퍼레이션(MongoOperations) 객체와 JSON 기반 몽고DB 쿼리가 주어지면, MongoOperations#find() 메서드에서 받은 아이템을 제공한다.Yes
Neo4jItemReader네오4j오퍼레이션(Neo4jOperations) 객체와 사이퍼(Cyhper) 쿼리 컴포넌트가 주어지면, 아이템은 Neo4jOperations.query 메서드의 결과로 반환된다.Yes
RepositoryItemReader스프링 데이터 페이징엔소팅리포지터리(PagingAndSortingRepository) 객체, 소팅(Sort) 및 실행할 메서드명이 주어지면 스프링 데이터 리포지터리 구현체에서 제공하는 아이템을 반환한다.Yes
StoredProcedureItemReader데이터베이스 저장 프로시저 실행에서 데이터베이스 커서로 읽는다. 스토어드프로시저아이템리더(StoredProcedureItemReader)를 참고하자.No
StaxEventItemReaderStAX를 통해 읽는다. 스택스이벤트아이템리더(StaxEventItemReader)를 참고하자.No
JsonItemReaderJson 문서에서 아이템을 읽는다. Json아이템리더(JsonItemReader)를 참고하자.No
AvroItemReader직렬화된 Avro 객체가 포함된 리소스에서 아이템을 읽는다.No
LdifReaderLDIF 리소스에서 아이템을 읽고 LdapAttributes로 반환한다.No
MappingLdifReaderLDIF 리소스에서 아이템을 읽고 레코드매퍼(RecordMapper)를 사용하여 아이템을 도메인 객체에 매핑한다.No

A.2. Item Writers

테이블 20. Available Item Writers

아이템 라이터설명스레드 세이프 여부(Thread-safe)
AbstractItemStreamItemWriterItemStreamItemWriter 인터페이스와 결합하는 기본 추상 클래스이다.Yes
AmqpItemWriter스프링 Amqp템플릿(AmqpTemplate)이 주어지면, 동기(synchronous) send 메서드를 
제공한다. ConvertAndSend(Object) 메소드를 사용하면 POJO 객체를 보낼 수 있다.Yes 
CompositeItemWriter주입된 아이템라이터(ItemWriter) 객체 리스트에 있는 각 아이템을 write 메서드에 전달한다.Yes
FlatFileItemWriter플랫 파일에 쓴다. 아이템스트림(ItemStream)스킵(Skippable) 기능을 포함한다. 플랫파일아이템라이터(FlatFileItemWriter)를 참고하자.No
HibernateItemWriter이 아이템 라이터는 하이버네이트 세션 어웨어(Hibernate-session) 인식하고 “하이버네이트(hibernate-aware)를 알고있지” 않은 아이템 라이터가 알 필요가 없는 일부 트랜잭션 관련 작업을 처리한 다음 실제 쓰기를 수행하도록 다른 아이템 라이터에게 위임(delegate)한다.Yes
ItemWriterAdapter아이템라이터(ItemWriter) 인터페이스에 모든 클래스를 적용한다.Yes
JdbcBatchItemWriter가능한 경우 프리페어드스테이트먼트(PreparedStatement)의 배치 기능을 사용하고, 플러시(flush) 중 오류를 찾기 위한 기본적인 스텝를 수행할 수 있다.Yes
JmsItemWriterJms오퍼레이션(JmsOperations) 객체를 사용하면 JmsOperations#convertAndSend() 메서드를 통해 아이템이 기본 큐(queue)에 기록된다.Yes
JpaItemWriter이 아이템 라이터는 JPA 엔터티매니저(EntityManager-aware)를 인식하고 “JPA(JPA-aware)를 인식하지” 않는 아이템라이터(ItemWriter)가 알 필요가 없는 일부 트랜잭션 관련 작업을 처리한 다음 실제 쓰기를 수행하도록 다른 라이터(writer)에게 위임한다.Yes
KafkaItemWriter카프카템플릿(KafkaTemplate) 객체를 사용하면 아이템의 키를 매핑하는 컨버터를 사용하여 KafkaTemplate#sendDefault(Obje ct, Object) 메서드를 통해 아이템이 기본 토픽에 기록된다. 삭제 이벤트를 토픽으로 보내도록 삭제 플래그를 구성할 수도 있다.No
MimeMessageItemWriter스프링의 자바메일센더(JavaMailSender)를 사용하면 Mime메세지(MimeMessage) 타입의 아이템이 메일 메시지로 전송된다.Yes
MongoItemWriter몽고오퍼레이션(MongoOperations) 객체가 주어지면 아이템은 MongoOperations.save(Object) 메서드를 통해 기록된다. 실제 쓰기는 트랜잭션이 커밋되기 전 가능한 마지막 순간까지 지연(delayed)된다.Yes
Neo4jItemWriter네오4j오퍼레이션(Neo4jOperations) 객체가 주어지면 아이템은 아이템라이터(ItemWriter)의 구성에 따라 save(Object) 메서드를 통해 저장되거나 delete(Object)를 통해 삭제된다.Yes
PropertyExtractingDelegatingItemWriter즉석에서 아규먼트를 생성하는 앱스트랙트메소드인보킹델리게이터(AbstractMethodInvokingDelegator)를 상속한다. 아규먼트는 주입된 필드명 배열을 기반으로 (스프링빈래퍼(SpringBeanWrapper)를 통해) 처리할 아이템의 필드에서 값을 검색하여 생성된다.Yes
RepositoryItemWriter스프링 데이터 Crud리포지터리(CrudRepository) 구현체가 주어지면 아이템은 구성에 지정된 방법을 통해 저장된다.Yes
StaxEventItemWriter마샬러(Marshaller) 구현체를 사용하여 각 아이템을 XML로 변환한 다음 StAX를 사용하여 XML 파일에 쓴다.No
JsonFileItemWriterJson오브젝트마샬러(JsonObjectMarshaller) 구현체를 사용하여 각 아이템을 Json으로 변환한 다음 이를 Json 파일에 쓴다.No
AvroItemWriterAvro를 사용하여 데이터를 라이터블리소스(WritableResource)로 직렬화한다.No
ListItemWriter리스트에 아이템을 쓰는 아이템 라이터이다.No