Spring Batch - устройства чтения, записи и процессоры

An Item Reader считывает данные в пакетное приложение Spring из определенного источника, тогда как Item Writer записывает данные из приложения Spring Batch в определенное место назначения.

An Item processor- это класс, содержащий код обработки, который обрабатывает данные, считанные в пакет 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, плоских файлов, CSV и т. Д.

Чтобы включить средство чтения в свое приложение, вам необходимо определить компонент для этого средства чтения, предоставить значения для всех требуемых свойств внутри компонента и передать id такого bean-компонента в качестве значения атрибута элемента chunk reader (то же самое для writer).

ItemReader

Это объект шага (пакетного процесса), который читает данные. ItemReader читает по одному элементу за раз. Spring Batch предоставляет интерфейсItemReader. Всеreaders реализовать этот интерфейс.

Ниже приведены некоторые из предопределенных классов ItemReader, предоставляемых Spring Batch для чтения из различных источников.

Читатель Цель
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> 

<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. Все авторы реализуют этот интерфейс.

Ниже приведены некоторые из предопределенных классов ItemWriter, предоставляемых Spring Batch для чтения из различных источников.

Писатель Цель
FlatFIleItemWriter Для записи данных в плоские файлы.
StaxEventItemWriter Для записи данных в файлы XML.
StoredProcedureItemWriter Для записи данных в хранимые процедуры базы данных.
JDBCPagingItemWriter Для записи данных в базу данных реляционных баз данных.
MongoItemWriter Для записи данных в MongoDB.
Neo4jItemWriter Для записи данных в Neo4j.

Таким же образом нам нужно настроить ItemWriters, создав bean-компоненты. Ниже приводится пример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 - Когда нет reader и writerприведены, Tasklet действует как процессор для SpringBatch. Он обрабатывает только одну задачу.

Мы можем определить пользовательский обработчик элементов, реализовав интерфейс ItemProcessor пакета org.springframework.batch.item.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; 
   } 
}