Spring Batch读取器,写入器和处理器
项目读取器将数据从特定源代码读入Spring批处理应用程序,而项目写入器将数据从Spring Batch应用程序写入特定目标。
Item处理器是一个包含处理代码的类,该代码处理读入spring批处理的数据。 如果应用程序读取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中的所有必需属性提供值,并将该bean的id作为值传递给chunk
元素的readers
属性(或writer
属性)。
ItemReader
它是读取数据的一个步骤(批处理过程)的实体。 ItemReader
每次读取一个项目。 Spring Batch提供了一个ItemReader接口。 所有的读者都实现这个接口。
以下是由Spring Batch提供的一些预定义的ItemReader
类,用于从各种源读取。
读取器 | 目的 |
---|---|
FlatFIleItemReader |
从文件中读取数据。 |
StaxEventItemReader |
从XML文件读取数据。 |
StoredProcedureItemReader |
从数据库的存储过程读取数据。 |
JDBCPagingItemReader |
从关系数据库中读取数据。 |
MongoItemReader |
从MongoDB读取数据。 |
Neo4jItemReader |
从Neo4j读取数据。 |
需要通过创建bean来配置ItemReaders。 以下是从XML文件读取数据的StaxEventItemReader
示例。
<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
这是写入数据的批处理步骤的要素。 ItemWriter
一次写入一个项目。 Spring Batch提供了一个ItemWriter接口。 所有的作家都实现了这个接口。
以下是由Spring Batch提供的一些预定义的ItemWriter
类,用于从各种源读取。
写入器 | 目的 |
---|---|
FlatFIleItemWriter |
将数据写入文件。 |
StaxEventItemWriter |
将数据写入XML文件 |
StoredProcedureItemWriter |
将数据写入数据库的存储过程。 |
JDBCPagingItemWriter |
将数据写入关系数据库数据库。 |
MongoItemWriter |
将数据写入MongoDB。 |
Neo4jItemWriter |
将数据写入Neo4j。 |
同样,需要通过创建bean来配置ItemWriters
。 以下是将数据写入MySQL数据库的JdbcCursorItemReader
示例。
<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类 - 当没有给出读写器时,Tasklet
充当SpringBatch的处理器。 它只处理单个任务。
可以通过实现包org.springframework.batch.item.ItemProcessor
的接口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;
}
}