Spring Batch 简明教程
Spring Batch - Readers, Writers & Processors
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 。所有 readers 都实现了此接口。
以下是 Spring Batch 提供的用于从各种来源读取数据的一些预定义 ItemReader 类。
Reader |
Purpose |
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 提供了一个接口 ItemWriter 。所有写入器都实现了此接口。
以下是 Spring Batch 提供的用于从各种来源读取数据的一些预定义 ItemWriter 类。
Writer |
Purpose |
FlatFIleItemWriter |
将数据写入平面文件。 |
StaxEventItemWriter |
将数据写入 XML 文件。 |
StoredProcedureItemWriter |
将数据写入数据库的存储过程。 |
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>
Item Processor
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 文档中。