- Spring 批处理教程
- 春季批次 - 主页
- Spring Batch - 概述
- 春季批次 - 环境
- Spring Batch - 架构
- 春季批次 - 应用
- Spring Batch - 配置
- 读者、作者和处理者
- Spring Batch - 基本应用
- Spring Batch - XML 到 MySQL
- Spring Batch - CSV 到 XML
- Spring Batch - MySQL 到 XML
- Spring Batch - MySQL 到平面文件
- Spring Batch 有用的资源
- Spring Batch - 快速指南
- Spring Batch - 有用的资源
- Spring Batch - 讨论
Spring Batch - 读取器、写入器和处理器
Item Reader将数据从特定源读取到 Spring Batch 应用程序中,而Item Writer将数据从 Spring Batch 应用程序写入特定目标。
Item处理器是一个类,其中包含处理读入 Spring Batch 的数据的处理代码。如果应用程序读取 n 条记录,则处理器中的代码将在每条记录上执行。
块是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、平面文件、CSV 等)读取和写入数据。
要在应用程序中包含读取器,您需要为该读取器定义一个 bean,为该 bean 内的所有必需属性提供值,并将此类 bean 的id作为值传递给块元素读取器的属性(与作家)。
项目阅读器
它是读取数据的(批处理过程)步骤的实体。ItemReader 一次读取一个项目。Spring Batch 提供了一个ItemReader接口。所有读者都实现这个接口。
以下是 Spring Batch 提供的一些预定义的 ItemReader 类,用于从各种来源读取数据。
读者 | 目的 |
---|---|
FlatFILEItemReader | 从平面文件中读取数据。 |
StaxEventItemReader | 从 XML 文件中读取数据。 |
存储过程项读取器 | 从数据库的存储过程中读取数据。 |
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 一次写入一个项目。Spring Batch 提供了一个ItemWriter接口。所有的作者都实现了这个接口。
以下是 Spring Batch 提供的一些预定义的 ItemWriter 类,用于从各种来源读取数据。
作家 | 目的 |
---|---|
FlatFILEItemWriter | 将数据写入平面文件。 |
StaxEventItemWriter | 将数据写入 XML 文件。 |
存储过程项编写器 | 将数据写入数据库的存储过程。 |
JDBCPagingItemWriter | 将数据写入关系数据库数据库。 |
MongoItemWriter | 将数据写入 MongoDB。 |
Neo4jItemWriter | 将数据写入 Neo4j。 |
同样,我们需要通过创建 bean 来配置 ItemWriter。以下是将数据写入 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; } }