Spring Batch-리더, 라이터 및 프로세서
안 Item Reader 특정 소스에서 스프링 배치 애플리케이션으로 데이터를 읽는 반면 Item Writer Spring Batch 애플리케이션의 데이터를 특정 대상에 씁니다.
안 Item processor스프링 배치로 읽은 데이터를 처리하는 처리 코드를 포함하는 클래스입니다. 애플리케이션이 n 개의 레코드를 읽으면 프로세서의 코드가 각 레코드에서 실행됩니다.
ㅏ chunk 의 하위 요소입니다. tasklet. 읽기, 쓰기 및 처리 작업을 수행하는 데 사용됩니다. 아래 표시된 단계 내에서이 요소를 사용하여 리더, 라이터 및 프로세서를 구성 할 수 있습니다.
<batch:job id = "helloWorldJob">
<batch:step id = "step1">
<batch:tasklet>
<batch:chunk reader = "cvsFileItemReader" writer = "xmlItemWriter"
processor = "itemProcessor" commit-interval = "10">
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
Spring Batch는 MongoDB, Neo4j, MySQL, XML, flatfile, CSV 등과 같은 다양한 파일 시스템 / 데이터베이스에서 데이터를 읽고 쓸 수있는 리더와 작성자를 제공합니다.
애플리케이션에 리더를 포함하려면 해당 리더에 대한 Bean을 정의하고 Bean 내의 모든 필수 특성에 값을 제공하고 id 청크 요소의 속성에 대한 값과 같은 빈의 reader (동일 writer).
ItemReader
데이터를 읽는 단계 (일괄 처리)의 엔티티입니다. ItemReader는 한 번에 한 항목을 읽습니다. Spring Batch는 인터페이스를 제공합니다ItemReader. 모든readers 이 인터페이스를 구현하십시오.
다음은 다양한 소스에서 읽기 위해 Spring Batch에서 제공하는 미리 정의 된 ItemReader 클래스의 일부입니다.
리더 | 목적 |
---|---|
FlatFIleItemReader | 플랫 파일에서 데이터를 읽습니다. |
StaxEventItemReader | XML 파일에서 데이터를 읽으려면. |
StoredProcedureItemReader | 데이터베이스의 저장 프로 시저에서 데이터를 읽으려면 |
JDBCPagingItemReader | 관계형 데이터베이스 데이터베이스에서 데이터를 읽습니다. |
MongoItemReader | MongoDB에서 데이터를 읽으려면. |
Neo4jItemReader | Neo4jItemReader에서 데이터를 읽으려면. |
우리는 구성해야 ItemReaders콩을 만들어요. 다음은StaxEventItemReader XML 파일에서 데이터를 읽습니다.
<bean id = "mysqlItemWriter"
class = "org.springframework.batch.item.xml.StaxEventItemWriter">
<property name = "resource" value = "file:xml/outputs/userss.xml" />
<property name = "marshaller" ref = "reportMarshaller" />
<property name = "rootTagName" value = "Tutorial" />
</bean>
<bean id = "reportMarshaller"
class = "org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name = "classesToBeBound">
<list>
<value>Tutorial</value>
</list>
</property>
</bean>
관찰 된대로 구성하는 동안 필요한 판독기의 각 클래스 이름을 지정해야하며 필요한 모든 속성에 값을 제공해야합니다.
ItemWriter
그것은의 요소입니다 step데이터를 쓰는 일괄 프로세스의. ItemWriter는 한 번에 하나의 항목을 씁니다. Spring Batch는 인터페이스를 제공합니다ItemWriter. 모든 작성자가이 인터페이스를 구현합니다.
다음은 다양한 소스에서 읽을 수 있도록 Spring Batch에서 제공하는 미리 정의 된 ItemWriter 클래스 중 일부입니다.
작가 | 목적 |
---|---|
FlatFIleItemWriter | 플랫 파일에 데이터를 기록합니다. |
StaxEventItemWriter | XML 파일에 데이터 쓰기. |
StoredProcedureItemWriter | 데이터베이스의 저장 프로 시저에 데이터를 기록합니다. |
JDBCPagingItemWriter | 관계형 데이터베이스 데이터베이스에 데이터를 기록합니다. |
MongoItemWriter | MongoDB에 데이터 쓰기. |
Neo4jItemWriter | Neo4j에 데이터 쓰기. |
같은 방식으로 빈을 생성하여 ItemWriter를 구성해야합니다. 다음은JdbcCursorItemReader MySQL 데이터베이스에 데이터를 씁니다.
<bean id = "dbItemReader"
class = "org.springframework.batch.item.database.JdbcCursorItemReader" scope = "step">
<property name = "dataSource" ref = "dataSource" />
<property name = "sql" value = "select * from tutorialsdata" />
<property name = "rowMapper">
<bean class = "TutorialRowMapper" />
</property>
</bean>
아이템 프로세서
ItemProcessor: ItemProcessor는 데이터를 처리하는 데 사용됩니다. 주어진 항목이 유효하지 않으면 반환null그렇지 않으면 주어진 항목을 처리하고 처리 된 결과를 반환합니다. 인터페이스ItemProcessor<I,O> 프로세서를 나타냅니다.
Tasklet class − 아니요 reader 과 writer주어진 경우 Tasklet은 SpringBatch의 프로세서 역할을합니다. 단일 작업 만 처리합니다.
인터페이스를 구현하여 커스텀 아이템 프로세서를 정의 할 수 있습니다. ItemProcessor 패키지의 org.springframework.batch.item.ItemProcessor. 이 ItemProcessor 클래스는 개체를 받아 데이터를 처리하고 처리 된 데이터를 다른 개체로 반환합니다.
배치 프로세스에서 "n"레코드 또는 데이터 요소를 읽은 다음 각 레코드에 대해 데이터를 읽고 처리하고 기록기에 데이터를 씁니다. 데이터를 처리하기 위해 전달 된 프로세서에서 릴레이합니다.
예를 들어, 특정 PDF 문서를로드하고, 새 페이지를 만들고, 데이터 항목을 표 형식으로 PDF에 쓰는 코드를 작성했다고 가정 해 보겠습니다. 이 응용 프로그램을 실행하면 XML 문서에서 모든 데이터 항목을 읽고 MySQL 데이터베이스에 저장하고 개별 페이지의 지정된 PDF 문서에 인쇄합니다.
예
다음은 샘플 ItemProcessor 클래스입니다.
import org.springframework.batch.item.ItemProcessor;
public class CustomItemProcessor implements ItemProcessor<Tutorial, Tutorial> {
@Override
public Tutorial process(Tutorial item) throws Exception {
System.out.println("Processing..." + item);
return item;
}
}