我有一个处理链需要在第二个顶部输出数据,即
System.currentTimeMillis() % 1000 == 0
在+/- 100毫秒内。所以,我按如下方式设置了一个Quartz计时器;
<quartz:inbound-endpoint repeatInterval="1000" responseTimeout="10000" doc:name="Quartz" jobName="publisher" startDelay="900">
<quartz:event-generator-job/>
</quartz:inbound-endpoint>
我注意到时间间隔相当稳定,间隔为1秒,但第二秒内的对齐是随机的,可能取决于计时器首次启动的时间。例如,我的上一次测试运行输出时间
System.currentTimeMillis() % 1000 == 449
我猜测startDelay仅适用于第一个间隔。如果我插入一个使用Thread.sleep进行occassionaly调整的自定义拦截器,我也猜测我可能会调整计时器对齐。即,如果它在449,Thread.sleep(451)醒来。或者,我可能会设置石英每50毫秒触发一次,并使用自定义拦截器来过滤掉我想要的时间范围内的事件。
是否有更清洁的“纯粹主义”方法让Mule这样做?
答案 0 :(得分:2)
将repeatInterval
替换为每秒触发一次的Cron表达式。
根据user guide中描述的Quartz支持的语法,以下内容应该有效:0/1 * * ? * *