java - 如何根据mule中的Quartz cronExpression设置文件轮询频率

标签 java mule mule-studio

我对 Mule 很陌生。

我遇到了一个问题。我有一个要求,我需要从 D:\驱动器中的 CSV 文件读取数据,并使用 Mule 每 2 分钟将数据插入 PostgreSQL 数据库。

所以我选择了 Quartz。

这是我的代码:

<configuration>
    <expression-language autoResolveVariables="true">
        <import class="org.mule.util.StringUtils" />
        <import class="org.mule.util.ArrayUtils" />
    </expression-language>
</configuration>

<spring:beans>
    <spring:bean id="jdbcDataSource" class=" ... your data source ... " />
</spring:beans>

<jdbc:connector name="jdbcConnector" dataSource-ref="jdbcDataSource">
    <jdbc:query key="insertRow"
        value="insert into my_table(col1, col2) values(#[message.payload[0]],#[message.payload[1]])" />
</jdbc:connector>

<quartz:connector name="myQuartzConnector" validateConnections="true" doc:name="Quartz">
  <receiver-threading-profile maxThreadsActive="1"/>
</quartz:connector>

    <flow name="QuartzFlow" processingStrategy="synchronous">

        <quartz:inbound-endpoint doc:name="Quartz"
            jobName="CronJobSchedule" cronExpression="0 0/2 * * * ?"
            connector-ref="myQuartzConnector" repeatCount="1">
            <quartz:event-generator-job>
                <quartz:payload>quartzSchedular started</quartz:payload>
            </quartz:event-generator-job>
        </quartz:inbound-endpoint>


        <flow-ref name="csvFileToDatabase" doc:name="Flow Reference" />

    </flow>


<flow name="csvFileToDatabase">
    <file:inbound-endpoint path="/tmp/mule/inbox"
        pollingFrequency="5000" moveToDirectory="/tmp/mule/processed">
         <file:filename-wildcard-filter pattern="*.csv" />
    </file:inbound-endpoint>

    <!-- Load all file in RAM - won't work for big files! -->
    <file:file-to-string-transformer />
    <!-- Split each row, dropping the first one (header) -->
    <splitter
        expression="#[rows=StringUtils.split(message.payload, '\n\r');ArrayUtils.subarray(rows,1,rows.size())]" />
    <!-- Transform CSV row in array -->
    <expression-transformer expression="#[StringUtils.split(message.payload, ',')]" />
    <jdbc:outbound-endpoint queryKey="insertRow" />
</flow>

这工作正常,但在 D:\中,如果我保持 csv 文件骡子读取 csv 文件并写入数据库,而无需等待 2 分钟(意味着这里的 Quartz 调度时间)。

如果我将文件连接器的轮询频率设置为轮询频率=“120000”(2分钟2*60*1000毫秒), quartz 也不会等待2分钟。在2分钟的调度时间内,如果我将csv文件放在D:\mule中读取csv文件并写入数据库而无需等待2分钟(这里指的是Quartz调度时间)。

即使我将 csv 文件放在 D:\中,mule Quartz 也必须每 2 分钟执行一次操作。仅此,我需要在此处包含哪些更改..

谁能帮帮我..

最佳答案

这是因为 csvFileToDatabase 流有自己的入站点,无论 quartz 流如何,都会执行该入站点。您将 file:inbound-enpoint 设置为每 5000 毫秒轮询一次。

无需同时拥有入站端点和quartz 来调度流。

要么更改文件:入站端点频率,要么如果您确实想使用quartz来触发流,请查看允许您使用入站端点中流的骡子请求模块:https://github.com/mulesoft/mule-module-requester

关于java - 如何根据mule中的Quartz cronExpression设置文件轮询频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29233579/

相关文章:

java - 如何将 Mule ESB 中的数据映射器转换为多个连接器以使用社区运行时?

骡子 ESB : why AMQP is shutting down in-between the flow with error message (Received shutdown signal for consumer tag)

mysql - 在 Mule 中插入大量记录时发生错误如何回滚数据库更改?

Java 类似功能在列表中不起作用

google-api - Mule 3.5 - 谷歌 OAuth2 示例

jdbc - Mule - 当 ArrayList 为空时做一些事情

java - Mule 错误,只有所有者线程可以写入 http 模块仍然发生的消息

java - ExtJS 网格分页不起作用

java - 从独立 Java 应用程序访问 Glassfish 上的安全 EJB

Java 泛型扩展