来自DB的Camel上下文属性

时间:2013-07-17 20:40:44

标签: spring apache-camel

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

您可以在那里注入 PropertiesResolver 的客户实施。

答案 1 :(得分: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连接的正确值的路由都会将属性注入到属性组件中,就好像它们来自属性文件一样。