Java 骆驼运行时计时器更改

Java 骆驼运行时计时器更改,java,apache-camel,apache-servicemix,Java,Apache Camel,Apache Servicemix,我有一个关于骆驼和计时器的问题。我有几个计时器,其中一个我想在运行时更新。我使用OSGiBlueprint来配置适当的时段。 那么我如何更改计时器(使用我知道的名称),例如从route?您可以向实现org.apache.camel.CamelContextAware的route添加一个bean。Camel将在启动时注入对上下文的引用。使用上下文,您可以获取计时器/石英端点的引用并更新其配置 我不知道的是,这是否足以让触发器根据新的periods/cron表达式重新调度。可能您必须将端点强制转换为

我有一个关于骆驼和计时器的问题。我有几个计时器,其中一个我想在运行时更新。我使用OSGiBlueprint来配置适当的时段。
那么我如何更改计时器(使用我知道的名称),例如从route?您可以向实现org.apache.camel.CamelContextAware的route添加一个bean。Camel将在启动时注入对上下文的引用。使用上下文,您可以获取计时器/石英端点的引用并更新其配置


我不知道的是,这是否足以让触发器根据新的periods/cron表达式重新调度。可能您必须将端点强制转换为TimerEndpoint并直接使用它,例如,根据新计划设置新的计时器实例。

计时器不允许在运行时更改,您需要停止路由,更新路由上的计时器端点,然后重新启动路由

尽管Ralf提到的内容可能会有所帮助,因为这允许您从bean访问CamelContext,您可以在bean中控制路由的生命周期

但也可以参见控制总线EIP,了解这些内容

如果您使用quartz而不是timer,那么它有一个JMXAPI,允许在运行时更新其调度程序/触发器。我们在hawtio中这样做,这样您就可以有一个可视化的UI来进行更新

您也可以通过使用quartz JMX API的Java代码来实现这一点

我在apachecamel JIRA tracker中记录了一张日志,其目的是在将来改进Camel,使其更易于更新计时器消费者:-然后在其实现时,您可以更轻松地进行更新