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 |
HibernateCursorItemReader | HQL 쿼리를 기반으로 커서에서 읽는다. Cursor-based 아이템리더(ItemReader) 를 참고하자. | No |
HibernatePagingItemReader | 페이징된 HQL 쿼리에서 읽는다. | Yes |
ItemReaderAdapter | 아이템리더(ItemReader) 인터페이스에 모든 클래스를 적용한다. | Yes |
JdbcCursorItemReader | JDBC를 통해 데이터베이스 커서에서 읽는다. Cursor-based 아이템리더(ItemReader) 를 참고하자. | No |
JdbcPagingItemReader | SQL 문이 주어지면, 메모리 부족 없이 큰 데이터를 읽을 수 있도록 로우을 페이징 처리한다. | Yes |
JmsItemReader | 스프링 Jms오퍼레이션(JmsOperations) 객체와 오류를 보낼 JMS 대상 또는 대상명이 주어지면 주입된 JmsOperations#receive() 메서드를 통해 수신된 아이템을 제공한다. | Yes |
JpaCursorItemReader | JPQL 쿼리를 실행하고 반환된 결과 집합을 반복한다. | No |
JpaPagingItemReader | JPQL 쿼리가 주어지면 메모리 부족 없이 대규모 데이터세트를 읽을 수 있도록 로우를 페이징처리한다. | Yes |
ListItemReader | 리스트의 아이템을 한 번에 하나씩 제공한다. | No |
MongoItemReader | 몽고오퍼레이션(MongoOperations) 객체와 JSON 기반 몽고DB 쿼리가 주어지면, MongoOperations#find() 메서드에서 받은 아이템을 제공한다. | Yes |
Neo4jItemReader | 네오4j오퍼레이션(Neo4jOperations) 객체와 사이퍼(Cyhper) 쿼리 컴포넌트가 주어지면, 아이템은 Neo4jOperations.query 메서드의 결과로 반환된다. | Yes |
RepositoryItemReader | 스프링 데이터 페이징엔소팅리포지터리(PagingAndSortingRepository) 객체, 소팅(Sort) 및 실행할 메서드명이 주어지면 스프링 데이터 리포지터리 구현체에서 제공하는 아이템을 반환한다. | Yes |
StoredProcedureItemReader | 데이터베이스 저장 프로시저 실행에서 데이터베이스 커서로 읽는다. 스토어드프로시저아이템리더(StoredProcedureItemReader) 를 참고하자. | No |
StaxEventItemReader | StAX를 통해 읽는다. 스택스이벤트아이템리더(StaxEventItemReader)를 참고하자. | No |
JsonItemReader | Json 문서에서 아이템을 읽는다. Json아이템리더(JsonItemReader) 를 참고하자. | No |
AvroItemReader | 직렬화된 Avro 객체가 포함된 리소스에서 아이템을 읽는다. | No |
LdifReader | LDIF 리소스에서 아이템을 읽고 LdapAttributes 로 반환한다. | No |
MappingLdifReader | LDIF 리소스에서 아이템을 읽고 레코드매퍼(RecordMapper) 를 사용하여 아이템을 도메인 객체에 매핑한다. | No |
A.2. Item Writers
테이블 20. Available Item Writers
아이템 라이터 | 설명 | 스레드 세이프 여부(Thread-safe) |
---|---|---|
AbstractItemStreamItemWriter | ItemStream 및 ItemWriter 인터페이스와 결합하는 기본 추상 클래스이다. | 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 |
JmsItemWriter | Jms오퍼레이션(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 |
JsonFileItemWriter | Json오브젝트마샬러(JsonObjectMarshaller) 구현체를 사용하여 각 아이템을 Json으로 변환한 다음 이를 Json 파일에 쓴다. | No |
AvroItemWriter | Avro를 사용하여 데이터를 라이터블리소스(WritableResource) 로 직렬화한다. | No |
ListItemWriter | 리스트에 아이템을 쓰는 아이템 라이터이다. | No |