当前位置: 首页 > 教程 > Spring Batch >

Spring Batch读取器,写入器和处理器

精华
小牛编辑
169浏览
2023-03-14

项目读取器将数据从特定源代码读入Spring批处理应用程序,而项目写入器将数据从Spring Batch应用程序写入特定目标。

Item处理器是一个包含处理代码的类,该代码处理读入spring批处理的数据。 如果应用程序读取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元素的readers属性(或writer属性)。

ItemReader

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

以下是由Spring Batch提供的一些预定义的ItemReader类,用于从各种源读取。

读取器 目的
FlatFIleItemReader 从文件中读取数据。
StaxEventItemReader 从XML文件读取数据。
StoredProcedureItemReader 从数据库的存储过程读取数据。
JDBCPagingItemReader 从关系数据库中读取数据。
MongoItemReader 从MongoDB读取数据。
Neo4jItemReader 从Neo4j读取数据。

需要通过创建bean来配置ItemReaders。 以下是从XML文件读取数据的StaxEventItemReader示例。

<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。 以下是将数据写入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; 
   } 
}