Helpex - Trao đổi & giúp đỡ Đăng nhập

Sử dụng Mule 4 Batch để tải tệp CSV vào cơ sở dữ liệu

Lê Tuyết Anh
· 17:00 19/05/2019
22:18:44 13/06/2021

Trong bài viết này, tôi sẽ giải thích cách tải tệp CSV vào cơ sở dữ liệu. Đối với điều này, chúng tôi sẽ sử dụng tệp đầu vào CSV có chứa danh sách nhân viên và sau đó chúng tôi sẽ chèn dữ liệu đó vào cơ sở dữ liệu MySQL (bạn có thể sử dụng bất kỳ cơ sở dữ liệu nào tùy chọn).

Mule có thể xử lý tin nhắn theo lô. Nó chia các thông báo lớn thành các bản ghi riêng lẻ được xử lý không đồng bộ trong các công việc hàng loạt.

Các giai đoạn của Công việc Hàng loạt 

Mỗi công việc hàng loạt bao gồm ba giai đoạn khác nhau:

1. Load và Dispatch: Đây là một giai đoạn tiềm ẩn. Nó hoạt động ở hậu trường. Trong giai đoạn này, Mule biến khối lượng tin nhắn được tuần tự hóa thành tập hợp các bản ghi để xử lý trong các bước hàng loạt.

2. Quy trình: Đây là giai đoạn bắt buộc của lô. Nó có thể có một hoặc nhiều bước hàng loạt để xử lý không đồng bộ các bản ghi.

3. On Complete: Đây là giai đoạn tùy chọn của lô. Nó cung cấp tóm tắt về các bản ghi được xử lý và giúp nhà phát triển có được cái nhìn sâu sắc về bản ghi nào thành công và bản ghi nào không thành công để bạn có thể giải quyết vấn đề một cách hợp lý.

                  failRecords, loadingRecords, Xử lýRecords, Thành côngRecords, TotalRecords

Sử dụng Mule 4 Batch để tải tệp CSV vào cơ sở dữ liệu

Tệp CSV mẫu:

id, tên, bộ phận

10, Anil Singh, 10

20, Kuldeep Rana, 20 tuổi

30, Ajay Bisht, 30 tuổi

Dòng chảy mule:

Tạo một dự án Mule trong Anypoint Studio. Luồng sẽ như thế này:

Sử dụng Mule 4 Batch để tải tệp CSV vào cơ sở dữ liệu

Trên Trình xử lý tệp mới hoặc Cập nhật: Trong Trình xử lý, hãy định cấu hình thư mục làm việc (có chứa tệp) và đảm bảo di chuyển tệp đầu vào sang thư mục khác sau khi tệp đã được xử lý, nếu không luồng sẽ có bản chất đệ quy và sẽ xử lý nhiều lần.

<file:listener doc:name="On New or Updated File" doc:id="0b3dd4ee-6a9e-448b-9344-044f7598f5ed" config-ref="File_Config" moveToDirectory="H:\mule-batch\archive">
<scheduling-strategy >
<fixed-frequency />
</scheduling-strategy>
<file:matcher filenamePattern="*.csv" />
</file:listener>

Thông báo chuyển đổi (Dataweave 2.0): Thành phần Thông báo chuyển đổi chuyển đổi tải trọng JSON của tệp CSV, sau đó sẽ được công việc hàng loạt sử dụng để chèn dữ liệu vào cơ sở dữ liệu.

<ee:transform doc:name="Transform Message" doc:id="94fffbf0-8d2d-4123-94bc-f64a5a79587d" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
id: $.id,
name: $.name,
department: $.department
}]]></ee:set-payload>
</ee:message>
</ee:transform>

Công việc hàng loạt: Chia khối lượng JSON đã chuyển đổi thành các bản ghi riêng lẻ để được xử lý bên trong công việc hàng loạt.

<batch:job jobName="batchmysqlBatch_Job" doc:id="337e976a-2b15-4bba-acc3-041b5b321b36" >
<batch:process-records >
<batch:step name="Batch_Step" doc:id="a6b1973f-f04b-4e80-9fd9-3ad20fd91ca5" >
<db:insert doc:name="Insert" doc:id="1aac2fe1-1d5f-4800-82d5-525612cd4692" config-ref="Database_Config">
<db:sql >INSERT INTO developer3(id, name, department)
VALUES(:id, :name, :department)</db:sql>
<db:input-parameters ><![CDATA[#[payload]]]></db:input-parameters>
</db:insert>
</batch:step>
</batch:process-records>
<batch:on-complete >
<logger level="INFO" doc:name="Logger" doc:id="bbbcc89c-8005-4642-b930-ca2e17628b71" message="#[payload]"/>
</batch:on-complete>
</batch:job>

Chèn cơ sở dữ liệu: Thành phần trơ cơ sở dữ liệu cho phép chúng tôi chèn dữ liệu vào cơ sở dữ liệu của mình bằng cách định cấu hình trình kết nối cơ sở dữ liệu với các thư viện và kết nối cần thiết bao gồm máy chủ, cổng, tên người dùng và mật khẩu. Tạo bảng cần thiết trong cơ sở dữ liệu để chèn dữ liệu.

Cấu hình cơ sở dữ liệu:

Sử dụng Mule 4 Batch để tải tệp CSV vào cơ sở dữ liệu

Mã hoàn chỉnh:

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:batch="http://www.mulesoft.org/schema/mule/batch" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:file="http://www.mulesoft.org/schema/mule/file"
xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/batch http://www.mulesoft.org/schema/mule/batch/current/mule-batch.xsd">
<db:config name="Database_Config" doc:name="Database Config" doc:id="a0756454-d6c9-477e-b1ed-bcf5ad58c23c" >
<db:my-sql-connection host="localhost" port="3306" user="root" password="test" database="mydb" />
</db:config>
<file:config name="File_Config" doc:name="File Config" doc:id="d8b07c72-be07-4465-a804-9094f65395a2" >
<file:connection workingDir="H:\mule-batch\input" />
</file:config>
<flow name="batchmysqlFlow" doc:id="6173077a-1d32-4e50-b123-4cc55436dc6d" >
<file:listener doc:name="On New or Updated File" doc:id="0b3dd4ee-6a9e-448b-9344-044f7598f5ed" config-ref="File_Config" moveToDirectory="H:\mule-batch\archive">
<scheduling-strategy >
<fixed-frequency />
</scheduling-strategy>
<file:matcher filenamePattern="*.csv" />
</file:listener>
<logger level="INFO" doc:name="Logger" doc:id="9d4a3e61-498c-4477-b84a-368bb7ffcd54" message="#[payload]"/>
<ee:transform doc:name="Transform Message" doc:id="94fffbf0-8d2d-4123-94bc-f64a5a79587d" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
id: $.id,
name: $.name,
department: $.department
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<logger level="INFO" doc:name="Logger" doc:id="9366b293-9ea8-4a25-bdec-e93553163962" message="#[payload]" />
<batch:job jobName="batchmysqlBatch_Job" doc:id="337e976a-2b15-4bba-acc3-041b5b321b36" >
<batch:process-records >
<batch:step name="Batch_Step" doc:id="a6b1973f-f04b-4e80-9fd9-3ad20fd91ca5" >
<db:insert doc:name="Insert" doc:id="1aac2fe1-1d5f-4800-82d5-525612cd4692" config-ref="Database_Config">
<db:sql >INSERT INTO developer3(id, name, department)
VALUES(:id, :name, :department)</db:sql>
<db:input-parameters ><![CDATA[#[payload]]]></db:input-parameters>
</db:insert>
</batch:step>
</batch:process-records>
<batch:on-complete >
<logger level="INFO" doc:name="Logger" doc:id="bbbcc89c-8005-4642-b930-ca2e17628b71" message="#[payload]"/>
</batch:on-complete>
</batch:job>
<logger level="INFO" doc:name="Logger" doc:id="d3e78f71-13f0-40ee-a1e1-639230370708" message="#[payload]"/>
</flow>
</mule>

Luồng Mule ở trên sẽ tải thành công dữ liệu tệp CSV của bạn vào cơ sở dữ liệu bằng công việc Batch.

Chúc các bạn học vui vẻ!

10 hữu ích 0 bình luận 18k xem chia sẻ

Có thể bạn quan tâm