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;
}
}