【问题标题】:Apache Camel With Quartz - No Concurrent Execution带有 Quartz 的 Apache Camel - 无并发执行
【发布时间】:2015-06-30 13:22:34
【问题描述】:

我想使用camel->quartz组件来安排一些工作在指定的时间间隔内完成。

但我希望以同步的方式进行。意味着,计划作业的下一次执行应仅在当前执行完成后开始。

我为 Servicemix 创建了路由和调度服务。

QuartzRoute.java

public class QuartzRoute extends RouteBuilder {
@Override
public void configure() throws Exception {

    from("quartz://myGroup/myTimerName?cron=0/1+*+*+*+*+?").process(new SchedulerService());
}

}

SchedulerService.java

public class SchedulerService implements Processor {

public void process(Exchange exchange) throws Exception {

    System.out.println("I'm running every 5 sec...");
    Thread.sleep(5000);     
    System.out.println("Exiting iteration ");
}

}

在这里,我希望每次都以相同的顺序打印“我每 5 秒运行一次...”和“退出迭代”。 在排序中,我希望仅在当前执行完成后再次执行此 SchedulerService。

【问题讨论】:

    标签: java apache-camel quartz-scheduler apache-servicemix


    【解决方案1】:

    使用石英组件的 stateful=true 选项。见Scheduled with fixed delay in quartz scheduler?

    “有状态的作业不允许并发执行,这意味着在execute(xx)方法完成之前发生的新触发器将被延迟。”

    【讨论】:

    • 您好,感谢您的评论。我可以在 from("quartz://myGroup/myTimerName?cron=0/1+*+*+*+*+?").process(new SchedulerService()); 的情况下定义 stateful 属性吗?如果是,比如何?
    • 只需将选项添加到您的 uri,例如:from("quartz://myGroup/myTimerName?cron=0/1+*+*+*+*+?&stateful=true").process(new SchedulerService());
    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2016-05-07
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多