那么使用 camel-cdi 来控制骆驼上下文的开始(在 fuse 上部署为 osgi 包)的好方法是什么?
Camel CDI 总是启动自动配置的 Camel 上下文。话虽如此,可以通过声明生命周期事件来自定义这些以便不启动路由,PostConstruct
例如:
@ApplicationScoped
class CustomCamelContext extends DefaultCamelContext {
@PostConstruct
void customize() {
setAutoStartup(false);
}
}
在该示例中,添加到该 Camel 上下文的路由不会与上下文一起启动。
这尊重 Camel 原则,以在该阶段完成的所有验证开始上下文。然而具有不启动路由的能力。
如何禁用或控制 RouteBuilder(和或其他东西)的自动发现?
Camel CDI会自动将RoutesBuilder
符合条件的bean@ContextName
添加到相应的bean 中。CamelContext
如果不CamelContext
存在这样的 bean,它将自动创建。另一方面,RoutesBuilder
使用用户定义的限定符限定的 bean 不会触发任何CamelContext
bean 的自动创建。这可用于在应用程序执行期间可能需要稍后添加的 Camel 路由。例如:
@DoNotDiscover
class MyRouteBuilder extends RouteBuilder {
// ...
}
@DoNotDiscover
如果没有明确声明符合条件的 Camel 上下文 bean ,MyRouteBuilder
则不会自动发现该 bean。它仍然可以在应用程序执行期间稍后使用,例如:
@Inject
@DoNotDiscover
Instance<RouteBuilder> routes;
@Inject
CamelContext context;
for (RouteBuilder route : routes)
route.addRoutes(route);