Apache Camel - 在启动时触发任务仅运行一次

Nig*_*olf 16 java spring apache-camel

我正在使用Camel&Spring开发Java项目.我们想在Spring完成它的事情并且Camel完成构建所有路由之后在单例bean上触发初始化方法.

我们不能在类创建时调用该方法,因为它与从@Component spring注释中获取的其他类具有动态链接,并且我们不知道这些类何时/是否已经加载到实际运行init方法作为a的一部分构造函数.

如何在Camel启动完成后立即调用一个或多个方法来运行?

谢谢!

Ben*_*Day 22

另一个提供更多灵活性的简单选项是使用带有repeatCount = 1的camel-timer和一个足够长的延迟值来让所有内容初始化.你还可以添加基本的异常处理来延迟/重试等...

from("timer://runOnce?repeatCount=1&delay=5000").to("bean:runOnceBean");
Run Code Online (Sandbox Code Playgroud)

  • 即使这样也应该有效: from("timer://runOnce?repeatCount=1").to("bean:runOnceBean"); 我认为我们不需要在这里延迟,因为如果我们将其保留在路线中,则只有在上下文准备就绪时才会调用它。如果我在某个地方思考错误,请告诉我。 (2认同)

Cla*_*sen 10

如果在CamelContext启动所有路由等之后必须调用bean ,那么你可以像Ben建议使用带有计时器的路由.

一个更好的选择是使用Camel的EventNotifier API.然后调用被触发的CamelContextStartedEvent上的逻辑.有关EventNotifier API的一些详细信息,请访问:http://camel.apache.org/eventnotifier-to-log-details-about-all-sent-exchanges.html

  • “找不到页面”...EventNotifier 的另一个示例:https://people.apache.org/~dkulp/camel/eventnotifier-to-log-details-about-all-sent-exchanges.html (2认同)