mule动态地从db查询移动文件到另一个位置

时间:2015-03-31 15:48:37

标签: mule mule-el

我想从查询select filepath from emp where status='y'动态地将文件移动到位置D:\ target:

这是我的表:

emp_Name    File Path      File Name    Status
ABC         D:\emp           abc.txt     y
xyz         D:\emp           xyz.txt     y
bcs         D:\emp           bcs.txt     n

以下是我的源代码:

<flow name="testdbFlow1">
    <http:listener config-ref="HTTP_Listener_Configuration"
        path="/" doc:name="HTTP" />
    <jdbc-ee:outbound-endpoint queryKey="allEmps"
        queryTimeout="-1" connector-ref="JDBCConnector" exchange-pattern="request-response"
        doc:name="Database" />

    <foreach doc:name="Foreach">
        <choice doc:name="Choice">
            <when expression="#[payload.status == 'Y']">
                <processor-chain doc:name="Processor Chain">
                    <set-variable variableName="filePath" value="#[payload.filepath]"
                        doc:name="Variable" />
                    <set-variable variableName="filename" value="#[payload.filename]"
                        doc:name="Variable" />

                    <logger message="#[filePath]" level="INFO"
                        doc:name="Logger" />
                    <logger message="#[filename]"
                        level="INFO" doc:name="Logger" />

                    <file:inbound-endpoint path="#[filePath]" name="input" doc:name="File" 
                        pollingFrequency="12000" responseTimeout="10000"> <file:filename-wildcard-filter 
                        pattern="#[filename]" /> </file:inbound-endpoint>

                    <file:outbound-endpoint name="output" path="D:\target" doc:name="File"/>

                </processor-chain>
            </when>
            <otherwise>
                <processor-chain doc:name="Processor Chain">
                    <set-variable variableName="filePath" value="#[payload.filepath]"
                        doc:name="Variable" />
                    <set-variable variableName="filename" value="#[payload.filename]"
                        doc:name="Variable" />

                    <logger message="#[filePath]" level="INFO"
                        doc:name="Logger" />
                    <logger message="#[filename]"
                        level="INFO" doc:name="Logger" />

                </processor-chain>
            </otherwise>
        </choice>
    </foreach>

</flow>

但它没有用。

1 个答案:

答案 0 :(得分:0)

Inbound在流程中间没有开箱即用。我建议使用Groovy的一个更简单的解决方案,因为你确切知道你需要使用的文件。

而不是使用file:inbound手动创建输入流:

<set-payload value="#[groovy: new java.io.FileInputStream(new java.io.File(filename))]"/>

使用后,您必须使用另一个groovy脚本删除该文件。