我想做一些POC,在这里我从Rest api获取数据。我以Json格式获取数据,然后放入一个文本文件。现在我尝试在DB中的文件数据。下面找到Mule流的XML格式。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.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/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8082" doc:name="HTTP Listener Configuration"/>
<http:request-config name="HTTP_Request_Configuration" host="$host" port="$port" doc:name="HTTP Request Configuration"/>
<db:generic-config name="Generic_Database_Configuration" url="localDB Connection" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" doc:name="Generic Database Configuration"/>
<file:connector name="File" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/>
<flow name="Flowname">
<http:listener config-ref="HTTP_Listener_Configuration" path="/Customer" doc:name="HTTP" />
<http:request config-ref="HTTP_Request_Configuration" path="/Services/Customers/api/2.0/search/{a}" method="GET" doc:name="HTTP">
<http:request-builder>
<http:uri-param paramName="a" value="s"/>
</http:request-builder>
</http:request>
<file:outbound-endpoint path="D:\Docs" outputPattern="test.txt" responseTimeout="10000" doc:name="File"/>
<json:json-to-object-transformer returnClass="java.util.HashMap" mimeType="text/plain" doc:name="JSON to Object"/>
<logger message="#[message.payload]" level="INFO" doc:name="Logger"/>
<set-payload value="#[message.payload.CustomerID],#[message.payload.Address],#[message.payload.DOB],#[message.payload.FirstName],#[message.payload.LastName],#[message.payload.MiddleName],#[message.payload.PhoneNo]" doc:name="Set Payload"/>
<db:insert config-ref="Generic_Database_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[INSERT INTO dbo.tblCustomer (Customerid,Address,Dob,Firstname,LastName,Middlename,Phoneno) VALUES (#[Message.payload.CustomerID],#[Message.payload.Address],#[Message.payload.DOB],#[Message.payload.FirstName],#[Message.payload.LastName],#[Message.payload.MiddleName],#[Message.payload.PhoneNo])]]></db:parameterized-query>
</db:insert>
</flow>
</mule>
从此服务中获取数据
[{
"Address": "372 Willene Drive",
"CustomerID": 1010007031,
"DOB": "1981-09-19",
"FirstName": "Aaliyah",
"LastName": "Gonzalez",
"MiddleName": "R",
"PhoneNumber": "7775271592"
}, {
"Address": null,
"CustomerID": 1010007743,
"DOB": "1937-05-28",
"FirstName": "Aaron",
"LastName": "Green",
"MiddleName": "T",
"PhoneNumber": "0924758727"
}, {
"Address": "7 Country Lake Drive",
"CustomerID": 1010004653,
"DOB": "1936-03-07",
"FirstName": "Aaron",
"LastName": "Gutierrez",
"MiddleName": "Q",
"PhoneNumber": "9919500942"
}, {
"Address": "157 Tamir Avenue",
"CustomerID": 1010005851,
"DOB": "1955-12-19",
"FirstName": "Abigail",
"LastName": "Garcia",
"MiddleName": "G",
"PhoneNumber": "4695049914"
}, {
"Address": "5 Cross Road",
"CustomerID": 1010007962,
"DOB": "1939-07-23",
"FirstName": "Abigail",
"LastName": "Gomez",
"MiddleName": "R",
"PhoneNumber": "6267010014"
}]
你能帮忙吗?
答案 0 :(得分:0)
我也在学习骡子并且有成千上万的问题但是,我想,我可以回答你的问题。
您的流程中有一些流程。你马上就提出了太多问题。
第一个问题是我们有3个入口点。 2个HTTP和1个文件。 HTTP1等待一个http调用。 HTTP2等待另一个,因为我们有文件组件实际上想要获取数据,所以两者都什么都不做。
让我们摆脱不必要的HTTP并重新配置File以从本地目录中获取一些文件。 Yo可以添加流的另一部分来从HTTP中获取文件(存储在文件中,这是不必要的),然后使用它。我跳过这个,因为它不适合将数据插入数据库的问题主题。
您的配置中的第二个问题是您将JSON映射到Map。你有阵列。所以,让我们将它映射到数组。见代码。
第三个问题是你有一个数据库连接器可以使用一个记录但你在Arry中有很多它们。所以,让我们逐个使用ForEach循环数组和进程记录。
为了证明它有效,我增加了几个记录器。
这是代码
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.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/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">
<db:generic-config name="Generic_Database_Configuration" url="localDB Connection" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" doc:name="Generic Database Configuration"/>
<file:connector name="File" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/>
<flow name="Flowname">
<file:inbound-endpoint path="C:\tmp" responseTimeout="10000" doc:name="FileIn">
<file:filename-regex-filter pattern="text.txt" caseSensitive="true"/>
</file:inbound-endpoint>
<file:file-to-string-transformer doc:name="File to String"/>
<json:json-to-object-transformer returnClass="java.util.ArrayList" mimeType="text/plain" doc:name="JSON to Object"/>
<logger message="#[payload]" level="INFO" doc:name="Log Whole Payload"/>
<foreach doc:name="For Each">
<logger message="#[payload]" level="INFO" doc:name="Log one Record"/>
<logger message="#[payload.Address] #[payload.CustomerID]" level="INFO" doc:name="Log two fields"/>
<db:insert config-ref="Generic_Database_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[INSERT INTO dbo.tblCustomer (Customerid,Address,Dob,Firstname,LastName,Middlename,Phoneno) VALUES (#[Message.payload.CustomerID],#[Message.payload.Address],#[Message.payload.DOB],#[Message.payload.FirstName],#[Message.payload.LastName],#[Message.payload.MiddleName],#[Message.payload.PhoneNo])]]></db:parameterized-query>
</db:insert>
<logger message="Record succesfull" level="INFO" doc:name="Log Success"/>
</foreach>
</flow>
</mule>
将 localDB Connection 更改为真实的网址,如
JDBC:SQLSERVER:// MYSERVER:1433;的databaseName = MYDB;用户=本身份识别码;密码=输入mypassword;
你很高兴。
运行应用程序。
将您的数据文件复制到c:\ tmp \ text.txt
应用程序将获取文件,转换为String(删除文件以备下一个文件),将String转换为对象数组,并为每个对象(这是您的行)记录它,记录两个字段,存储记录和制作成功的日志信息。
然后,Application将等待另一个text.txt继续。
当然,所有这些步骤都不是必需的,但它们可以帮助您了解正在发生的事情,发生的时间和发生的事情。