Spring Batch - ผู้อ่านนักเขียนและผู้ประมวลผล
อัน Item Reader อ่านข้อมูลลงในแอปพลิเคชันชุดสปริงจากแหล่งเฉพาะในขณะที่ไฟล์ Item Writer เขียนข้อมูลจากแอปพลิเคชัน Spring Batch ไปยังปลายทางที่ต้องการ
อัน Item processorเป็นคลาสที่มีรหัสการประมวลผลซึ่งประมวลผลข้อมูลที่อ่านไปยังชุดสปริง หากแอปพลิเคชันอ่าน 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 และส่งผ่าน id ของ bean ดังกล่าวเป็นค่าแอตทริบิวต์ขององค์ประกอบก้อน 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 ด้วยการสร้างถั่ว ต่อไปนี้เป็นตัวอย่างของ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;
}
}