Apache camel 防止camel初始化终结点
我在路由中有一个无法在本地安装的端点,因为缺少一些在本地环境中不可用且无法访问的属性 因此,当我在本地环境中启动应用程序时,会出现错误org.apache.camel.FailedToCreateRouteException。但在服务器环境中,它可以正常工作 如何防止camel在本地环境上初始化端点我有一个属性,可以确定环境是否是本地的?像这样的Apache camel 防止camel初始化终结点,apache-camel,Apache Camel,我在路由中有一个无法在本地安装的端点,因为缺少一些在本地环境中不可用且无法访问的属性 因此,当我在本地环境中启动应用程序时,会出现错误org.apache.camel.FailedToCreateRouteException。但在服务器环境中,它可以正常工作 如何防止camel在本地环境上初始化端点我有一个属性,可以确定环境是否是本地的?像这样的 <choice> <when> <simple>{{is.local}} == true&
<choice>
<when>
<simple>{{is.local}} == true</simple>
<to uri="direct:local.route"/>
</when>
<otherwise>
<to uri="direct:server.route"/>
</otherwise>
</choice>
但是对于from子句来说,多亏了米卡·勒布使用配置文件的想法,我喜欢这样做
我创建了camel-route-local.xml和camel-route.xml。第一个文件包含应该在本地环境中工作的路由。第二个-与不适用于本地环境的端点一起运行的路由。文件camel-context.xml包含camelContext定义
在我的主application-context.xml中,我在文件末尾添加了这些行
<beans profile="default">
<import resource="classpath:camel-route.xml"/>
<import resource="classpath:camel-context.xml"/>
</beans>
<beans profile="LOCAL">
<import resource="classpath:camel-route-local.xml"/>
<import resource="classpath:camel-context.xml"/>
</beans>
现在,,如果我运行local environment-又称为set spring profile为local-它将使用适用于本地环境的路由加载camel-route-local.xml,我也不再检查is.local,如果环境不是local-又称为任何其他配置文件-它将加载主路由。您可以使用Java DSL来完成这部分,只创建简单的RouteBuilder和根据您需要的任何内容,从部件初始化所需内容。有更好的替代解决方案。为什么不将参数作为环境变量注入呢。然后将这些属性作为属性注入,您可以使用Camel的属性解析器将这些属性注入到from或to中 请参见此处的PropertyInput
我认为您不应该修改camel上下文来处理本地执行。我认为您应该在配置文件管理或属性配置中使用多个camel上下文instead@MickaëlB但它对端点有帮助吗?是的。在您的情况下,我认为属性将是最相关的解决方案。所以你可以像定义路由一样,在配置文件中确定值。@MikaëlB或者我甚至可以完全避免路由的定义?我不知道你的路由在做什么,但这不太可能。关键是要避免选择配置。