0

现在,我使用 Spring 引导 Camel。使用 Spring,我可以将我的 Camel 上下文指向它们各自的属性文件,然后在启动时注入这些文件。我的问题是我现在想将我的属性从文件移动到数据库,但仍然能够像以前一样使用属性占位符。这样做的最佳方法是什么?

我注意到有一个PropertiesResolver我可以实现的接口,但我不知道如何告诉 Camel 我的实现。Camel 的文档在这方面非常缺乏。

我也不反对让 Spring 为我从数据库中获取属性,尽管我没有看到这种情况发生。

4

2 回答 2

0

我想我会用我发现的工作来更新这个。这可能不是最好的方法,但它有效,我不必修改 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 连接的正确值的路由都会将属性注入到属性组件中,就好像它们直接来自属性文件一样。

于 2013-07-25T18:17:01.967 回答
0

PropertiesResolver 旨在帮助 Camel 从 OSGi 包或普通类路径中找到属性文件。

如果你想设置你的所有者PropertiesResolver,你可以尝试使用org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer

您可以在此处注入PropertiesResolver的客户实现。

于 2013-07-18T08:21:50.923 回答