秒の先頭にデータを出力する必要がある処理チェーンがあります。
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 秒間隔でかなり安定していることに気付きましたが、1 秒以内の配置はランダムであり、おそらくタイマーが最初に開始される時期によって異なります。たとえば、最後のテスト実行の出力時間は
System.currentTimeMillis() % 1000 == 449
startDelay は最初の間隔にのみ適用されると思います。また、Thread.sleep を使用して時折微調整するカスタム インターセプターを挿入すると、タイマーの配置を微調整する可能性があると推測しています。つまり、449 でウェイクすると、Thread.sleep(451) になります。または、クォーツを 50 ミリ秒ごとにトリガーするように設定し、カスタム インターセプターを使用して、目的の時間範囲からイベントを除外することもできます。
Muleにこれをさせるためのよりクリーンな「純粋主義者」のアプローチはありますか?