Spring Batch - Pembaca, Penulis & Prosesor

Sebuah Item Reader membaca data ke dalam aplikasi batch pegas dari sumber tertentu, sedangkan file Item Writer menulis data dari aplikasi Spring Batch ke tujuan tertentu.

Sebuah Item processoradalah kelas yang berisi kode pemrosesan yang memproses data yang dibaca ke batch pegas. Jika aplikasi membaca n catatan kode di prosesor akan dijalankan pada setiap catatan.

SEBUAH chunk adalah elemen anak dari tasklet. Ini digunakan untuk melakukan operasi baca, tulis, dan pemrosesan. Kita dapat mengkonfigurasi pembaca, penulis, dan prosesor menggunakan elemen ini, dalam langkah seperti yang ditunjukkan di bawah ini.

<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 menyediakan pembaca dan penulis untuk membaca dan menulis data dari berbagai sistem file / database seperti MongoDB, Neo4j, MySQL, XML, flatfile, CSV, dll.

Untuk menyertakan pembaca dalam aplikasi Anda, Anda perlu mendefinisikan kacang untuk pembaca itu, memberikan nilai ke semua properti yang diperlukan di dalam kacang, dan meneruskan id kacang tersebut sebagai nilai untuk atribut elemen potongan reader (sama untuk writer).

ItemReader

Ini adalah entitas dari langkah (dari proses batch) yang membaca data. ItemReader membaca satu item dalam satu waktu. Spring Batch menyediakan InterfaceItemReader. Semuareaders menerapkan antarmuka ini.

Berikut adalah beberapa kelas ItemReader standar yang disediakan oleh Spring Batch untuk dibaca dari berbagai sumber.

Pembaca Tujuan
FlatFIleItemReader Untuk membaca data dari file datar.
StaxEventItemReader Untuk membaca data dari file XML.
StoredProcedureItemReader Untuk membaca data dari prosedur tersimpan database.
JDBCPagingItemReader Untuk membaca data dari database database relasional.
MongoItemReader Untuk membaca data dari MongoDB.
Neo4jItemReader Untuk membaca data dari Neo4jItemReader.

Kita perlu mengkonfigurasi file ItemReadersdengan membuat kacang. Berikut adalah contoh dariStaxEventItemReader yang membaca data dari file 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>

Seperti yang diamati, saat mengonfigurasi, kita perlu menentukan nama kelas masing-masing dari pembaca yang diperlukan dan kita perlu memberikan nilai ke semua properti yang diperlukan.

ItemWriter

Ini adalah elemen dari stepdari proses batch yang menulis data. ItemWriter menulis satu item setiap kali. Spring Batch menyediakan InterfaceItemWriter. Semua penulis menerapkan antarmuka ini.

Berikut adalah beberapa kelas ItemWriter standar yang disediakan oleh Spring Batch untuk dibaca dari berbagai sumber.

Penulis Tujuan
FlatFIleItemWriter Untuk menulis data ke dalam file datar.
StaxEventItemWriter Untuk menulis data ke dalam file XML.
StoredProcedureItemWriter Untuk menulis data ke dalam prosedur tersimpan database.
JDBCPagingItemWriter Untuk menulis data ke dalam database database relasional.
MongoItemWriter Untuk menulis data ke MongoDB.
Neo4jItemWriter Untuk menulis data ke Neo4j.

Dengan cara yang sama, kita perlu mengkonfigurasi ItemWriters dengan membuat kacang. Berikut adalah contoh dariJdbcCursorItemReader yang menulis data ke database 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>

Prosesor Barang

ItemProcessor: ItemProcessor digunakan untuk memproses data. Ketika item yang diberikan tidak valid, ia kembalinull, jika tidak, ia memproses item yang diberikan dan mengembalikan hasil yang diproses. AntarmukaItemProcessor<I,O> mewakili prosesor.

Tasklet class - Saat tidak reader dan writerdiberikan, Tasklet bertindak sebagai prosesor untuk SpringBatch. Ini hanya memproses tugas tunggal.

Kita dapat mendefinisikan prosesor item kustom dengan mengimplementasikan antarmuka ItemProcessor dari paket org.springframework.batch.item.ItemProcessor. Kelas ItemProcessor ini menerima objek dan memproses data dan mengembalikan data yang diproses sebagai objek lain.

Dalam proses batch, jika "n"record atau elemen data dibaca, kemudian untuk setiap record akan membaca data, mengolahnya, dan menulis data di penulis. Untuk mengolah data tersebut, relay dilewatkan pada prosesor.

Misalnya, Anda telah menulis kode untuk memuat dokumen PDF tertentu, membuat halaman baru, menulis item data ke PDF dalam format tabel. Jika Anda menjalankan aplikasi ini, aplikasi membaca semua item data dari dokumen XML, menyimpannya di database MySQL, dan mencetaknya di dokumen PDF yang diberikan di halaman individual.

Contoh

Berikut adalah contoh kelas 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; 
   } 
}