Spring Batch - สถาปัตยกรรม

ต่อไปนี้คือการแสดงแผนผังของสถาปัตยกรรมของ Spring Batch ตามที่แสดงในรูปสถาปัตยกรรมประกอบด้วยองค์ประกอบหลักสามส่วน ได้แก่Application, Batch Coreและ Batch Infrastructure.

Application - ส่วนประกอบนี้ประกอบด้วยงานทั้งหมดและโค้ดที่เราเขียนโดยใช้ Spring Batch framework

Batch Core - ส่วนประกอบนี้มีคลาส API ทั้งหมดที่จำเป็นในการควบคุมและเปิดใช้งาน Batch Job

Batch Infrastructure - ส่วนประกอบนี้ประกอบด้วยผู้อ่านนักเขียนและบริการที่ใช้โดยทั้งแอปพลิเคชันและส่วนประกอบหลักของแบทช์

ส่วนประกอบของ Spring Batch

ภาพประกอบต่อไปนี้แสดงส่วนประกอบต่างๆของ Spring Batch และวิธีการเชื่อมต่อซึ่งกันและกัน

งาน

ในแอปพลิเคชัน Spring Batch งานคือกระบวนการแบตช์ที่จะดำเนินการ ทำงานตั้งแต่ต้นจนจบโดยไม่หยุดชะงัก งานนี้แบ่งออกเป็นขั้นตอนเพิ่มเติม (หรืองานมีขั้นตอน)

เราจะกำหนดค่างานใน Spring Batch โดยใช้ไฟล์ XML หรือคลาส Java ต่อไปนี้คือการกำหนดค่า XML ของงานใน Spring Batch

<job id = "jobid"> 
   <step id = "step1" next = "step2"/> 
   <step id = "step2" next = "step3"/> 
   <step id = "step3"/> 
</job>

ชุดงานถูกกำหนดค่าภายในแท็ก <job> </job> มีแอตทริบิวต์ชื่อid. ภายในแท็กเหล่านี้เรากำหนดนิยามและลำดับขั้นตอน

Restartable - โดยทั่วไปเมื่องานกำลังดำเนินอยู่และเราพยายามเริ่มต้นใหม่อีกครั้งซึ่งถือเป็น restartและจะเริ่มต้นใหม่อีกครั้ง เพื่อหลีกเลี่ยงปัญหานี้คุณต้องตั้งค่าไฟล์restartable มูลค่าถึง false ดังแสดงด้านล่าง

<job id = "jobid" restartable = "false" >

</job>

ขั้นตอน

step เป็นส่วนอิสระของงานซึ่งมีข้อมูลที่จำเป็นในการกำหนดและดำเนินงาน (ส่วนของงาน)

ตามที่ระบุไว้ในแผนภาพแต่ละขั้นตอนประกอบด้วย ItemReader, ItemProcessor (ทางเลือก) และ ItemWriter A job may contain one or more steps.

ผู้อ่านนักเขียนและผู้ประมวลผล

อัน item reader อ่านข้อมูลในแอปพลิเคชัน Spring Batch จากแหล่งเฉพาะในขณะที่ไฟล์ item writer เขียนข้อมูลจากแอปพลิเคชัน Spring Batch ไปยังปลายทางเฉพาะ

อัน Item processorเป็นคลาสที่มีรหัสการประมวลผลซึ่งประมวลผลข้อมูลที่อ่านลงในชุดสปริง หากแอปพลิเคชันอ่าน"n" จากนั้นรหัสในโปรเซสเซอร์จะถูกเรียกใช้ในแต่ละเร็กคอร์ด

เมื่อไม่มีผู้อ่านและนักเขียนให้ a taskletทำหน้าที่เป็นโปรเซสเซอร์สำหรับ SpringBatch มันประมวลผลงานเดียวเท่านั้น ตัวอย่างเช่นหากเรากำลังเขียนงานด้วยขั้นตอนง่ายๆที่เราอ่านข้อมูลจากฐานข้อมูล MySQL และประมวลผลและเขียนลงในไฟล์ (แบน) ขั้นตอนของเราจะใช้ -

  • reader ซึ่งอ่านจากฐานข้อมูล MySQL

  • writer ซึ่งเขียนลงในไฟล์แบบแบน

  • custom processor ซึ่งประมวลผลข้อมูลตามความต้องการของเรา

<job id = "helloWorldJob"> 
   <step id = "step1"> 
      <tasklet> 
         <chunk reader = "mysqlReader" writer = "fileWriter" 
            processor = "CustomitemProcessor" ></chunk> 
      </tasklet> 
   </step> 
</ job>

Spring Batch มีรายการ readers และ writers. การใช้คลาสที่กำหนดไว้ล่วงหน้าเหล่านี้เราสามารถกำหนดถั่วให้กับพวกเขาได้ เราจะหารือreaders และ writers ในรายละเอียดเพิ่มเติมในบทต่อ ๆ ไป

JobRepository

ที่เก็บงานใน Spring Batch ให้การดำเนินการสร้างดึงข้อมูลอัปเดตและลบ (CRUD) สำหรับการใช้งาน JobLauncher งานและขั้นตอน เราจะกำหนดที่เก็บงานในไฟล์ XML ดังที่แสดงด้านล่าง

<job-repository id = "jobRepository"/>

นอกจาก idมีตัวเลือกเพิ่มเติม (ไม่บังคับ) ให้เลือก ต่อไปนี้คือการกำหนดค่าของที่เก็บงานพร้อมตัวเลือกทั้งหมดและค่าดีฟอลต์

<job-repository id = "jobRepository" 
   data-source = "dataSource" 
   transaction-manager = "transactionManager" 
   isolation-level-for-create = "SERIALIZABLE" 
   table-prefix = "BATCH_" 
   max-varchar-length = "1000"/>

In-Memory Repository - ในกรณีที่คุณไม่ต้องการคงวัตถุโดเมนของ Spring Batch ไว้ในฐานข้อมูลคุณสามารถกำหนดค่า jobRepository เวอร์ชันในหน่วยความจำดังที่แสดงด้านล่าง

<bean id = "jobRepository" 
   class = "org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean ">
   <property name = "transactionManager" ref = "transactionManager"/>
</bean>

JobLauncher

JobLauncher เป็นอินเทอร์เฟซที่เปิดใช้งาน Spring Batch ด้วยไฟล์ given set of parameters. SampleJoblauncher เป็นคลาสที่ใช้ JobLauncherอินเตอร์เฟซ. ต่อไปนี้คือการกำหนดค่า JobLauncher

<bean id = "jobLauncher" 
   class = "org.springframework.batch.core.launch.support.SimpleJobLauncher"> 
   <property name = "jobRepository" ref = "jobRepository" /> 
</bean>

JobInstance

JobInstanceแสดงถึงการรันตรรกะของงาน มันถูกสร้างขึ้นเมื่อเราเรียกใช้งาน แต่ละอินสแตนซ์ของงานมีความแตกต่างกันตามชื่อของงานและพารามิเตอร์ที่ส่งผ่านไปยังงานนั้นขณะรัน

หากการดำเนินการ JobInstance ล้มเหลวคุณสามารถดำเนินการ JobInstance เดียวกันได้อีกครั้ง ดังนั้น JobInstance แต่ละงานสามารถมีการดำเนินการหลายงาน

JobExecution และ StepExecution

JobExecution และ StepExecution เป็นการแสดงการดำเนินการของงาน / ขั้นตอน ประกอบด้วยข้อมูลการรันของงาน / ขั้นตอนเช่นเวลาเริ่มต้น (ของงาน / ขั้นตอน) เวลาสิ้นสุด (ของงาน / ขั้นตอน)