Spring Boot 在运行时修改camel路由/上下文

8fsztsew  于 2023-04-20  发布在  Spring
关注(0)|答案(1)|浏览(222)

我在我的应用程序中使用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来更新路由和上下文文件。但令人困惑的是如何在运行时重新加载/应用对上下文和路由的新更改而无需重新启动应用程序。请有人帮助解决这个问题。

fykwrbwg

fykwrbwg1#

在spring application中实现这一点的唯一方法通常是使用org.springframework.context.ConfigurableApplicationContext.refresh()刷新application context。为了避免重新启动整个应用程序,camel的内容应该在它自己的application context中,它可能有application的整体context作为父。然后你只需要重新启动必要的内容。
请注意,运行时路由管理和其他功能已经是camel-karaf的一部分了,因此,与其重新发明轮子,不如将camel的东西移到一个karaf示例中。

相关问题