以编程方式从camel context访问camel属性

时间:2015-07-03 22:06:08

标签: java spring apache-camel

我目前正在使用的项目使用camel作为路由框架。 在spring中配置camel context时,我们传递一个属性文件,其中包含配置camel路由或控制运行时行为时所需的一堆全局属性:

<camel:camelContext xmlns="http://camel.apache.org/schema/spring" id="my-id">
    <camel:propertyPlaceholder location="my-system.properties" id="global-properties"/>
    ...
</camel:camelContext>

并说my-system.properties有一个如下条目:

my-system.properties
# Global properties that control my-system configuration and run time
...
foo={{bar}} 
...

配置路由时,我可以使用foo表示法访问{{foo}}属性。使用@PropertyInject注释的其他bean也可以使用它。但是,在我的设计中有一个用例,当一个普通的POJO不是由spring创建的(而是一个enum而不是相关的)需要访问我的foo属性。因为这个POJO传递了CamelContext作为方法参数,所以我觉得我应该能够从那里获得foo的值。但是我花了一点时间,不知道自己是怎么做的。

我知道我可以再次加载属性文件,甚至可以获取系统属性System.getProperty("bar"),一切都会起作用,但它看起来像是在欺骗我。

2 个答案:

答案 0 :(得分:2)

CamelContext上有一个api来解析属性占位符 - 它是resolvePropertyPlaceholders方法:

答案 1 :(得分:0)

如果你的POJO不是由SpringContext管理的,我不会看到你可以自动注入属性的任何方式。虽然您的方法可能看起来不那么花哨或优雅,但它的优点是不会通过使用其他注射工具给您带来任何开销。