我正在使用带有 spring boot 和 camel-config.xml 文件的 Apache Camel。我创建了一个每秒运行的简单路由并运行一个类方法:
<camelContext xmlns="http://camel.apache.org/schema/spring" id="myContext" trace="true" streamCache="true" useMDCLogging="true">
<route id="testCron">
<from uri="quartz2://TestCron?cron=0/1 * * * * ?" />
<to uri="bean:folder.MyClass?method=test" />
</route>
</camelContext>
该类只是有一个计数器 int 递增并显示:
package folder;
public class MyClass {
private static int count = 0;
public static void test(Exchange exchange) throws Exception {
count = count + 1;
System.out.println(count);
}
}
我有另一段代码(与显示无关)可以启动和停止上述路线。我遇到的问题是停止路线时,等待 5 秒钟然后重新开始。
它不是继续它离开计数的地方,而是赶上路线停止时它没有做的每一次迭代。
我读了很多书试图解决这个问题。我学到的是以下内容:
- 发生的事情被称为“失火”
- 有一个允许配置失火指令的参数
- 根据 Apache Camel 文档,如果您使用 cron 表达式,则不能使用 trigger.XXX 选项(这将允许配置失火指令)。
- 根据 Apache Camel 文档,只有在石英处于集群模式时才会记录失火。
- 您可以配置石英属性以禁用集群模式(我不需要它)。
我没有运气的尝试:
- 使用 org.quartz.jobStore.isClustered: false 创建了一个石英属性文件。我不确定它是否被捡起(把它放在 src/resources 中并创建一个指向它的 bean)。它没有解决问题。
- 试图在路线 quartz2://TestCron?trigger.misfireInstruction=2&cron=0/1 * * * * 中将 misfireInstruction 设置为触发选项?”
我完全没有选择:x 将不胜感激任何帮助 :)