首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据mule中的Quartz cronExpression设置文件轮询频率

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

Stack Overflow用户
提问于 2015-03-24 21:12:04
回答 1查看 945关注 0票数 0

我对Mule非常陌生。

我正面临着一个问题。我有一个需求,我需要从一个CSV文件中读取数据,该文件位于D:\驱动器中,并且每隔2分钟使用Mule.将数据插入PostgreSQL数据库。

所以我选择了Quartz。

下面是我的代码:

代码语言:javascript
复制
<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文件mule读取csv文件并写入数据库,而无需等待2分钟(这里是Quartz调度时间)。

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

即使我将csv文件放在D:\中,mule Quartz也必须每隔2分钟执行一次操作。只是,对于这个,我需要在这里包含哪些更改..

有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-24 22:50:01

这是因为流csvFileToDatabase有它自己的inbound-enpoint,无论quartz流是什么,它都将执行。您将file:inbound-enpoint设置为每5000毫秒轮询一次。

不需要同时具有入站端点和quartz调度流。

或者更改file:inbound-端点频率,或者如果您确实希望使用quartz来触发流,请看一下允许您使用入站端点中流的mule请求模块:https://github.com/mulesoft/mule-module-requester

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29233579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档