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

2022-09-02 19:31:09

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

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

在Camel启动完成后,我如何调用一个或多个方法仅运行一次?

谢谢!


答案 1

另一个给你更多灵活性的简单选项是使用驼峰计时器,其重复计数=1和延迟值足够长,可以让所有内容初始化。您还可以将基本异常处理添加到延迟/重试等...

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

答案 2

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

一个更好的替代方案是使用Camel中的EventNotifier API。然后调用 CamelContextStartedEvent 上被触发的逻辑。有关事件通知程序 API 的一些详细信息,请参阅:http://camel.apache.org/eventnotifier-to-log-details-about-all-sent-exchanges.html


推荐