关闭时,Camel会暂停Clustered Quartz触发器

时间:2014-02-12 11:10:42

标签: java spring apache-camel quartz-scheduler

我在quartz.properties中有以下配置

org.quartz.scheduler.instanceId=AUTO
org.quartz.scheduler.instanceName=JobCluster

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.dataSource=myDataSource
org.quartz.dataSource.chargebackDataSource.jndiURL=jdbc/myDataSource

org.quartz.jobStore.isClustered=true
org.quartz.threadPool.threadCount=5

Spring配置如下所示:

<bean id="quartz2" class="org.apache.camel.component.quartz2.QuartzComponent">
    <property name="propertiesFile" value="quartz.properties"/>
</bean>

    <route>
        <from uri="quartz2://myTrigger?job.name=myJob&amp;job.durability=true&amp;stateful=true&amp;trigger.repeatInterval=60000&amp;trigger.repeatCount=-1"/>
        <to uri="bean:myBean?method=retrieve"/>
....

在应用程序关闭时,Quartz触发器状态更改为PAUSED,并且在下一次启动后再也没有更改为WAITING,因此从未再次触发。

是否可以在应用程序重启后以某种方式配置quartz / camel以恢复触发?

  • Camel版本为2.12.0。
  • Spring版本3.2.4.RELEASE

实际上这种行为与指南中的声明相矛盾:

  

如果您在群集模式下使用Quartz,例如JobStore是集群的。然后,当节点停止/关闭时,Quartz2组件不会暂停/删除触发器。这允许触发器继续在集群中的其他节点上运行。

1 个答案:

答案 0 :(得分:0)

如果您想以

动态暂停/恢复路线
org.apache.camel.impl.ThrottlingRoutePolicy

然后建议使用org.apache.camel.SuspendableService,因为它允许细粒度的暂停和恢复操作。并且在调用这些操作时使用org.apache.camel.util.ServiceHelper来辅助这些操作,因为它支持常规org.apache.camel.Service instances的后备。

有关详细信息,请参阅RoutePolicyQuartz Component

希望这个帮助