我对骡子很新。
我遇到了问题。我有一个要求,我需要从D:\ drive&中的CSV文件中读取数据。每隔2分钟使用Mule将数据插入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文件mule读取csv文件并写入数据库而不等待2分钟(这意味着Quartz调度时间)。
如果我使用pollingfrequency =“120000”设置文件连接器的轮询频率(2分钟2 * 60 * 1000毫秒),石英也不会等待2分钟。在2分钟的调度时间内,如果我将csv文件放在D:\ mule中读取csv文件并写入数据库而不等待2分钟(这意味着Quartz调度时间)。
即使我将csv文件放在D:\中,mule Quartz也必须每2分钟执行一次动作。只有,为此我需要在这里进行哪些更改..
任何人都可以帮助我..
答案 0 :(得分:1)
这是因为流csvFileToDatabase有自己的入站点,无论石英流如何都会执行。您有文件:inbound-enpoint设置为每5000毫秒轮询一次。
Theres无需同时具有入站端点和石英调度流程。
更改文件:入站端点频率或者如果您确实想使用quartz来触发流程,请查看允许您使用入站端点中间流的mule请求模块:https://github.com/mulesoft/mule-module-requester