Readers Writers 和 Processors
Item Reader从特定源将数据读入spring批处理应用程序,而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中的所有必需属性提供值,并将此类bean的id作为值传递给chunk元素reader的属性(同样为writer )。
ItemReader
它是读取数据的步骤(批处理过程)的实体。 ItemReader一次读取一个项目。 Spring Batch提供了一个Interface ItemReader 。 所有readers实现了这个界面。
以下是Spring Batch提供的一些预定义的ItemReader类,可以从各种来源中读取。
读者 | 目的 |
---|---|
FlatFIleItemReader | 从平面文件中读取数据。 |
StaxEventItemReader | 从XML文件中读取数据。 |
StoredProcedureItemReader | 从数据库的存储过程中读取数据。 |
JDBCPagingItemReader | 从关系数据库数据库中读取数据。 |
MongoItemReader | 从MongoDB读取数据。 |
Neo4jItemReader | 从Neo4jItemReader读取数据。 |
我们需要通过创建bean来配置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提供了一个Interface ItemWriter 。 所有作者都实现了这个接口。
以下是Spring Batch提供的一些预定义的ItemWriter类,用于从各种源读取。
作家 | 目的 |
---|---|
FlatFIleItemWriter | 将数据写入平面文件。 |
StaxEventItemWriter | 将数据写入XML文件。 |
StoredProcedureItemWriter | 将数据写入数据库的存储过程。 |
JDBCPagingItemWriter | 将数据写入关系数据库数据库。 |
MongoItemWriter | 将数据写入MongoDB。 |
Neo4jItemWriter | 将数据写入Neo4j。 |
同样,我们需要通过创建bean来配置ItemWriters。 以下是JdbcCursorItemReader的示例, 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的处理器。 它只处理单个任务。
我们可以通过实现包org.springframework.batch.item.ItemProcessor的接口ItemProcessor来定义自定义项处理器。 此ItemProcessor类接受一个对象并处理数据并将处理后的数据作为另一个对象返回。
在批处理过程中,如果读取"n"记录或数据元素,则对于每个记录,它将读取数据,处理数据并在写入器中写入数据。 为了处理数据,它在传递的处理器上进行中继。
例如,假设您已编写代码来加载特定PDF文档,创建新页面,以表格格式将数据项写入PDF。 如果执行此应用程序,它将从XML文档中读取所有数据项,将它们存储在MySQL数据库中,并在给定的PDF文档中将它们打印在各个页面中。
例子 (Example)
以下是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;
}
}