Spring Batch - Readers, Writers和 Processors

项目阅读器从特定来源将数据读入弹出批处理应用程序,而项目编写器将数据从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,flatfile,CSV等.

要在您的应用程序中包含一个阅读器,您需要为该阅读器定义一个bean,为bean中的所有必需属性提供值,并传递 id 这样的bean作为块元素读者的属性的值(对于 writer 相同).

ItemReader

它是读取数据的步骤(批处理过程)的实体. ItemReader一次读取一个项目. Spring Batch提供了一个接口 ItemReader .所有读者都实现了这个界面.

以下是Spring Batch提供的一些预定义的ItemReader类,可以从各种来源读取.

Reader目的
FlatFIleItemReader从平面文件中读取数据.
StaxEventItemReader从XML文件中读取数据.
StoredProcedureItemReader从数据库的存储过程中读取数据.
JDBCPagingItemReader从关系数据库数据库中读取数据.
MongoItemReader读取数据来自MongoDB.
Neo4jItemReader从Neo4jItemReader读取数据.

我们需要通过创建 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>

正如所观察到的,在配置时,我们需要指定所需阅读器的相应类名,我们需要为所有必需属性提供值.

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>

项目处理器

ItemProcessor :ItemProcessor用于处理数据.当给定项无效时,它返回 null ,否则它处理给定项并返回处理结果.接口 ItemProcessor< I,O> 代表处理器.

Tasklet类 : 当没有给出 reader writer 时,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; 
   } 
}