Spring Batch - Kiến trúc

Sau đây là biểu diễn sơ đồ của kiến ​​trúc của Spring Batch. Như được mô tả trong hình, kiến ​​trúc chứa ba thành phần chính:Application, Batch CoreBatch Infrastructure.

Application - Thành phần này chứa tất cả các công việc và mã chúng ta viết bằng khung Spring Batch.

Batch Core - Thành phần này chứa tất cả các lớp API cần thiết để kiểm soát và khởi chạy một Công việc hàng loạt.

Batch Infrastructure - Thành phần này chứa trình đọc, người viết và dịch vụ được sử dụng bởi cả thành phần cốt lõi của ứng dụng và Batch.

Các thành phần của Spring Batch

Hình minh họa sau đây cho thấy các thành phần khác nhau của Spring Batch và cách chúng được kết nối với nhau.

Việc làm

Trong ứng dụng Spring Batch, một công việc là quá trình hàng loạt sẽ được thực hiện. Nó chạy từ đầu đến cuối mà không bị gián đoạn. Công việc này được chia thành nhiều bước (hoặc một công việc chứa các bước).

Chúng tôi sẽ cấu hình một công việc trong Spring Batch bằng cách sử dụng tệp XML hoặc lớp Java. Sau đây là cấu hình XML của một Công việc trong Spring Batch.

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

Một công việc hàng loạt được định cấu hình trong các thẻ <job> </job>. Nó có một thuộc tính có tênid. Trong các thẻ này, chúng tôi xác định định nghĩa và thứ tự của các bước.

Restartable - Nói chung, khi một công việc đang chạy và chúng ta cố gắng bắt đầu lại nó được coi là restartvà nó sẽ được bắt đầu lại. Để tránh điều này, bạn cần đặtrestartable có giá trị đối với false như hình bên dưới.

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

</job>

Bươc

A step là một phần độc lập của công việc chứa thông tin cần thiết để xác định và thực hiện công việc (phần của nó).

Như đã chỉ rõ trong sơ đồ, mỗi bước bao gồm một ItemReader, ItemProcessor (tùy chọn) và một ItemWriter. A job may contain one or more steps.

Người đọc, Người viết và Người xử lý

An item reader đọc dữ liệu vào ứng dụng Spring Batch từ một nguồn cụ thể, trong khi item writer ghi dữ liệu từ ứng dụng Spring Batch tới một đích cụ thể.

An Item processorlà một lớp chứa mã xử lý xử lý dữ liệu được đọc vào lô mùa xuân. Nếu ứng dụng đọc"n" các bản ghi, sau đó mã trong bộ xử lý sẽ được thực thi trên mỗi bản ghi.

Khi không có người đọc và người viết nào được cung cấp, tasklethoạt động như một bộ xử lý cho SpringBatch. Nó chỉ xử lý một nhiệm vụ duy nhất. Ví dụ: nếu chúng ta đang viết một công việc với một bước đơn giản trong đó chúng ta đọc dữ liệu từ cơ sở dữ liệu MySQL và xử lý nó và ghi nó vào một tệp (phẳng), thì bước của chúng ta sử dụng:

  • A reader mà đọc từ cơ sở dữ liệu MySQL.

  • A writer mà ghi vào một tệp phẳng.

  • A custom processor xử lý dữ liệu theo mong muốn của chúng tôi.

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

Spring Batch cung cấp một danh sách dài các readerswriters. Sử dụng các lớp được xác định trước này, chúng ta có thể xác định các bean cho chúng. Chúng ta sẽ thảo luậnreaderswriters chi tiết hơn trong các chương tới.

JobRepository

Kho lưu trữ Công việc trong Spring Batch cung cấp các hoạt động Tạo, Truy xuất, Cập nhật và Xóa (CRUD) cho việc triển khai JobLauncher, Job và Step. Chúng tôi sẽ xác định một kho công việc trong một tệp XML như hình dưới đây.

<job-repository id = "jobRepository"/>

Ngoài id, có một số tùy chọn khác (tùy chọn) có sẵn. Sau đây là cấu hình kho lưu trữ công việc với tất cả các tùy chọn và giá trị mặc định của chúng.

<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 - Trong trường hợp bạn không muốn duy trì các đối tượng miền của Spring Batch trong cơ sở dữ liệu, bạn có thể cấu hình phiên bản trong bộ nhớ của jobRepository như hình dưới đây.

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

JobLauncher

JobLauncher là một giao diện chạy lệnh Spring Batch với given set of parameters. SampleJoblauncher là lớp thực hiện JobLaunchergiao diện. Sau đây là cấu hình của JobLauncher.

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

JobInstance

A JobInstanceđại diện cho quá trình chạy hợp lý của một công việc; nó được tạo ra khi chúng ta điều hành một công việc. Mỗi cá thể công việc được phân biệt bằng tên của công việc và các tham số được truyền cho nó khi đang chạy.

Nếu thực thi JobInstance không thành công, thì có thể thực thi lại JobInstance tương tự. Do đó, mỗi JobInstance có thể có nhiều lần thực thi công việc.

JobExecution và StepExecution

JobExecution và StepExecution là đại diện của việc thực hiện một công việc / bước. Chúng chứa thông tin chạy của công việc / bước như thời gian bắt đầu (công việc / bước), thời gian kết thúc (công việc / bước).