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