では、camel-cdi を使用してキャメル コンテキストの開始を制御するための適切なアプローチは何でしょうか (fuse で osgi バンドルとしてデプロイされます)。
Camel CDI は常に、自動構成された Camel コンテキストを開始します。そうは言っても、PostConstruct
たとえば次のようにライフサイクル イベントを宣言することで、ルートが開始されないようにこれらをカスタマイズすることができます。
@ApplicationScoped
class CustomCamelContext extends DefaultCamelContext {
@PostConstruct
void customize() {
setAutoStartup(false);
}
}
その例では、その Camel コンテキストに追加されたルートは、コンテキストとともに開始されません。
これは、その段階で行われたすべての検証でコンテキストを開始するというキャメルの原則を尊重します。まだルーティングを開始しない機能を備えています。
RouteBuilder (およびまたはその他のもの) の自動検出を無効または制御する方法は?
RoutesBuilder
で修飾されたBean は、Camel CDI によって@ContextName
対応する Bean に自動的に追加されます。CamelContext
そのようなCamelContext
Bean が存在しない場合は、自動的に作成されます。一方、RoutesBuilder
ユーザー定義の修飾子で修飾された Bean は、Bean の自動作成をトリガーしませんCamelContext
。これは、後でアプリケーションの実行中に追加する必要がある Camel ルートに使用できます。たとえば、次のようにします。
@DoNotDiscover
class MyRouteBuilder extends RouteBuilder {
// ...
}
修飾された Camel コンテキスト Bean@DoNotDiscover
が明示的に宣言されていない場合、MyRouteBuilder
Bean は自動検出されません。それでも、後でアプリケーションの実行中に使用できます。たとえば、次のようになります。
@Inject
@DoNotDiscover
Instance<RouteBuilder> routes;
@Inject
CamelContext context;
for (RouteBuilder route : routes)
route.addRoutes(route);