现在,我使用 Spring 引导 Camel。使用 Spring,我可以将我的 Camel 上下文指向它们各自的属性文件,然后在启动时注入这些文件。我的问题是我现在想将我的属性从文件移动到数据库,但仍然能够像以前一样使用属性占位符。这样做的最佳方法是什么?
我注意到有一个PropertiesResolver
我可以实现的接口,但我不知道如何告诉 Camel 我的实现。Camel 的文档在这方面非常缺乏。
我也不反对让 Spring 为我从数据库中获取属性,尽管我没有看到这种情况发生。
现在,我使用 Spring 引导 Camel。使用 Spring,我可以将我的 Camel 上下文指向它们各自的属性文件,然后在启动时注入这些文件。我的问题是我现在想将我的属性从文件移动到数据库,但仍然能够像以前一样使用属性占位符。这样做的最佳方法是什么?
我注意到有一个PropertiesResolver
我可以实现的接口,但我不知道如何告诉 Camel 我的实现。Camel 的文档在这方面非常缺乏。
我也不反对让 Spring 为我从数据库中获取属性,尽管我没有看到这种情况发生。
我想我会用我发现的工作来更新这个。这可能不是最好的方法,但它有效,我不必修改 Camel 源代码。基本上,我将所有类从继承自 RouteBuilder 转换为继承自 GJKRouteBuilder(继承自 RouteBuilder)。然后在那里,我这样做了:
public class GJKRouteBuilder extends RouteBuilder {
@Override
protected void checkInitialized() throws Exception {
//Get properties from CamelContext using getContext()
//Lookup properties from DB based on CamelContext
//Get the properties component from the context (or create one)
//call setOverrideProperties() on properties component
super.checkInitialized();
}
}
同样,可能不是最好的方法,但它有效。现在,任何从 GJKRouteBuilder 继承并具有通过 Spring 连接的正确值的路由都会将属性注入到属性组件中,就好像它们直接来自属性文件一样。
PropertiesResolver 旨在帮助 Camel 从 OSGi 包或普通类路径中找到属性文件。
如果你想设置你的所有者PropertiesResolver,你可以尝试使用org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer。
您可以在此处注入PropertiesResolver的客户实现。