Readers Writers 和 Processors

优质
小牛编辑
137浏览
2023-12-01

Item Reader从特定源将数据读入spring批处理应用程序,而Item Writer将数据从Spring Batch应用程序写入特定目标。

Item processor是一个包含处理代码的类,该处理代码处理读入弹簧批处理的数据。 如果应用程序读取n条记录,则处理器中的代码将在每条记录上执行。

chunktasklet的子元素。 它用于执行读取,写入和处理操作。 我们可以在如下所示的步骤中使用此元素配置读取器,写入器和处理器。

<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元素reader的属性(同样为writer )。

ItemReader

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

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

读者目的
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提供了一个Interface ItemWriter 。 所有作者都实现了这个接口。

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

作家目的
FlatFIleItemWriter将数据写入平面文件。
StaxEventItemWriter将数据写入XML文件。
StoredProcedureItemWriter将数据写入数据库的存储过程。
JDBCPagingItemWriter将数据写入关系数据库数据库。
MongoItemWriter将数据写入MongoDB。
Neo4jItemWriter将数据写入Neo4j。

同样,我们需要通过创建bean来配置ItemWriters。 以下是JdbcCursorItemReader的示例, 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 class - 当没有给出readerwriter ,Tasklet充当SpringBatch的处理器。 它只处理单个任务。

我们可以通过实现包org.springframework.batch.item.ItemProcessor的接口ItemProcessor来定义自定义项处理器。 此ItemProcessor类接受一个对象并处理数据并将处理后的数据作为另一个对象返回。

在批处理过程中,如果读取"n"记录或数据元素,则对于每个记录,它将读取数据,处理数据并在写入器中写入数据。 为了处理数据,它在传递的处理器上进行中继。

例如,假设您已编写代码来加载特定PDF文档,创建新页面,以表格格式将数据项写入PDF。 如果执行此应用程序,它将从XML文档中读取所有数据项,将它们存储在MySQL数据库中,并在给定的PDF文档中将它们打印在各个页面中。

例子 (Example)

以下是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; 
   } 
}