- Spring Batch 教程
- Spring Batch - 首页
- Spring Batch - 概述
- Spring Batch - 环境
- 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 Processor) 是一个包含处理代码的类,该代码处理读取到 Spring Batch 中的数据。如果应用读取 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、平面文件、CSV 等。
要在您的应用中包含读取器,您需要为该读取器定义一个 bean,为 bean 中的所有必需属性提供值,并将此 bean 的id作为属性值传递给块元素的reader(写入器writer 同理)。
项目读取器 (ItemReader)
它是步骤(批处理过程的一个步骤)中读取数据的实体。ItemReader 一次读取一个项目。Spring Batch 提供了一个接口ItemReader。所有读取器都实现此接口。
以下是 Spring Batch 提供的一些预定义 ItemReader 类,用于从各种来源读取数据。
读取器 | 用途 |
---|---|
FlatFIleItemReader | 从平面文件读取数据。 |
StaxEventItemReader | 从 XML 文件读取数据。 |
StoredProcedureItemReader | 从数据库的存储过程中读取数据。 |
JDBCPagingItemReader | 从关系数据库读取数据。 |
MongoItemReader | 从 MongoDB 读取数据。 |
Neo4jItemReader | 从 Neo4j 读取数据。 |
我们需要通过创建 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)
它是批处理过程步骤中写入数据的元素。ItemWriter 一次写入一个项目。Spring Batch 提供了一个接口ItemWriter。所有写入器都实现此接口。
以下是 Spring Batch 提供的一些预定义 ItemWriter 类,用于从各种来源读取数据。
写入器 | 用途 |
---|---|
FlatFIleItemWriter | 将数据写入平面文件。 |
StaxEventItemWriter | 将数据写入 XML 文件。 |
StoredProcedureItemWriter | 将数据写入数据库的存储过程。 |
JDBCPagingItemWriter | 将数据写入关系数据库。 |
MongoItemWriter | 将数据写入 MongoDB。 |
Neo4jItemWriter | 将数据写入 Neo4j。 |
同样,我们需要通过创建 bean 来配置 ItemWriters。以下是一个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>
项目处理器 (Item Processor)
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; } }