我在我的应用程序中使用Apache camel作为集成框架。我使用@ImportResource annotation将CamelContext.xml文件添加到我的应用程序中。就像这样,camel上下文文件是使用另一个服务从DB中获取的。@ImportResource("http://IP:PORT/files/CamelContext.xml")
Camel Context将如下所示
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
">
<import resource="http://IP:PORT/files/SampleTestFile.xml" />
<camelContext id="ModelIntegration" trace="true"
messageHistory="true" xmlns="http://camel.apache.org/schema/spring">
<routeContextRef ref="SampleTestRef" />
</camelContext>
</beans>
由于camel context是通过API从另一个服务获取的,所以我想在我的应用程序中添加路由管理。所以我计划在路由管理服务中使用API来更新路由和上下文文件。但令人困惑的是如何在运行时重新加载/应用对上下文和路由的新更改而无需重新启动应用程序。请有人帮助解决这个问题。
1条答案
按热度按时间fykwrbwg1#
在spring application中实现这一点的唯一方法通常是使用
org.springframework.context.ConfigurableApplicationContext.refresh()
刷新application context。为了避免重新启动整个应用程序,camel的内容应该在它自己的application context中,它可能有application的整体context作为父。然后你只需要重新启动必要的内容。请注意,运行时路由管理和其他功能已经是camel-karaf的一部分了,因此,与其重新发明轮子,不如将camel的东西移到一个karaf示例中。