无论如何,我可以使用开箱即用的mule组件配置一个将select语句(oracle db)的结果集写入文件的流程吗?
我尝试了多种变形金刚组合,但只有一组完成了这项工作的一半。
以下是配置XML:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:data-mapper="http://www.mulesoft.org/schema/mule/ee/data-mapper" xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz" xmlns:wmq="http://www.mulesoft.org/schema/mule/ee/wmq" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:jdbc-ee="http://www.mulesoft.org/schema/mule/ee/jdbc" xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" 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" version="EE-3.4.1"
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/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.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/jdbc http://www.mulesoft.org/schema/mule/ee/jdbc/current/mule-jdbc-ee.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
http://www.mulesoft.org/schema/mule/ee/wmq http://www.mulesoft.org/schema/mule/ee/wmq/current/mule-wmq-ee.xsd
http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd
http://www.mulesoft.org/schema/mule/ee/data-mapper http://www.mulesoft.org/schema/mule/ee/data-mapper/current/mule-data-mapper.xsd">
<jdbc-ee:oracle-data-source name="Oracle_Data_Source1" user="username" password="password" url="jdbc:oracle:thin:@//ip:1521/instance_name" transactionIsolation="READ_COMMITTED" doc:name="Oracle Data Source"/>
<jdbc-ee:connector name="Database" dataSource-ref="Oracle_Data_Source1" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database" transactionPerMessage="false">
<jdbc-ee:query key="selectTOP10" value="select CONTRACT_ID FROM LAM_CONTRACT where rownum<11"/>
</jdbc-ee:connector>
<data-mapper:config name="map_to_map" transformationGraphPath="map_to_map.grf" doc:name="map_to_map"/>
<file:connector name="File" writeToDirectory="D:\Test File Transfer\Destination" workFileNamePattern="test2.txt" autoDelete="true" outputAppend="true" streaming="true" validateConnections="true" doc:name="File"/>
<file:endpoint path="D:\Test File Transfer\Destination" outputPattern="test2.txt" name="File1" responseTimeout="10000" doc:name="File"/>
<flow name="oracle_to_fileFlow1" doc:name="oracle_to_fileFlow1">
<jdbc-ee:inbound-endpoint queryTimeout="-1" pollingFrequency="1000" doc:name="Database" connector-ref="Database" queryKey="selectTOP10"/>
<logger level="INFO" doc:name="Logger" message="Result: #[payload]------------------------"/>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<file:outbound-endpoint responseTimeout="10000" doc:name="File" ref="File1"/>
</flow>
</mule>
我替换了db连接的用户名和密码。 如果我运行流程,它将填充文本文件,如下所示:
{CONTRACT_ID = 12} {CONTRACT_ID = 13} {CONTRACT_ID = 11} {CONTRACT_ID = 14} {CONTRACT_ID = 15} {CONTRACT_ID = 9} {CONTRACT_ID = 8} {CONTRACT_ID = 7} ...依此类推。
接下来我需要做的是: 1)我想以表格格式输出日期(第一行 - 列名(标题),其余行数据)
2)我希望能够设置/更改列分隔符
3)我相信我必须使用Quartz组件才能在某个时刻启动流并只运行一次查询。我已经尝试配置一个,但是我在谷歌上花了几个小时后才知道如何做到这一点我认为最好在这里问一下。
有人可以帮忙吗?我想补充说我是C#,.NET,SQL Server开发人员,所以我真的希望我不必学习java以便用Mule来做这件事。
P.S。:虽然我已经诅咒了这么长时间的反复SSIS,但我不得不承认它与Mule相比规则 - 只有个人意见:)。答案 0 :(得分:2)
1&amp; 2)如果你有Mule EE(就像你的例子中那样),这并不困难。要在不到五分钟的时间内完成此操作,您可以使用object-to-json-transformer
,然后使用DataMapper创建从JSON到CSV的转换。您可以选择分隔符并将列标题添加到设置的输出中。
3)假设您可以谷歌了解如何为Mule Quartz端点设置cron表达式,您首先需要在流程之外的端点:
<jdbc-ee:endpoint name="ep" queryKey="selectTOP10" connector-ref="Database" />
并且流程将是这样的:
<quartz:inbound-endpoint jobName="cronJobPoolTime" cronExpression="* * * * * ?">
<quartz:endpoint-polling-job>
<quartz:job-endpoint ref="ep"/>
</quartz:endpoint-polling-job>
</quartz:inbound-endpoint>
<json:object-to-json-transformer/>
<data-mapper:transform config-ref="json_to_csv"/>
<file:outbound-endpoint responseTimeout="10000" doc:name="File" ref="File1"/>
P.S。:我个人的观点是,专业地使用Mule需要Java和相关技术的基本知识,例如Spring,Maven等。这就是整个事物所依赖的东西。
答案 1 :(得分:0)
要在文件中写入结果集,只需删除&lt; byte-array-to-string-transformer doc:name =&#34; Byte Array to String&#34; /&gt; 并将对象置于XML 或对象置换为JSON Transformer ..