Java 从camel上下文以编程方式访问camel属性
我目前正在工作的项目使用camel作为路由框架。 在spring中配置驼峰上下文时,我们传递一个属性文件,其中包含配置驼峰路由或控制运行时行为时所需的一组全局属性:Java 从camel上下文以编程方式访问camel属性,java,spring,apache-camel,Java,Spring,Apache Camel,我目前正在工作的项目使用camel作为路由框架。 在spring中配置驼峰上下文时,我们传递一个属性文件,其中包含配置驼峰路由或控制运行时行为时所需的一组全局属性: <camel:camelContext xmlns="http://camel.apache.org/schema/spring" id="my-id"> <camel:propertyPlaceholder location="my-system.properties" id="global-proper
<camel:camelContext xmlns="http://camel.apache.org/schema/spring" id="my-id">
<camel:propertyPlaceholder location="my-system.properties" id="global-properties"/>
...
</camel:camelContext>
配置路由时,我可以使用{{foo}
符号访问foo
属性。使用@PropertyInject
注释的其他bean也可以使用它。但是,在我的设计中有一个用例,即不是由spring创建的普通POJO(而是一个枚举,但这并不相关)需要访问我的foo
属性。因为这个POJO将CamelContext作为一个方法参数传递给它,所以我很自然地认为我应该能够从那里获得foo
的值。然而,我花了一点时间,自己也不知道怎么做
我知道我可以再次加载属性文件,甚至可以获取系统属性
system.getProperty(“bar”)
,一切都可以正常工作,但在我看来这似乎是在作弊。如果您的POJO不是由SpringContext管理的,我看不到任何自动注入属性的方法。虽然您的方法看起来可能不是最花哨或优雅的,但它的优点是,使用其他注入工具不会给您带来任何开销。CamelContext上有一个api来解析属性占位符-它是resolvePropertyPlaceholders
方法:
resolvePropertyPlaceholders(“{{foo}”)
而是调用resolvePropertyPlaceholders(“foo”)
,并取回了“foo”字符串。你的回答让我睁大了眼睛,说对了。我不相信这样一个基本的东西会从这个伟大的框架中被遗漏。非常感谢你
my-system.properties
# Global properties that control my-system configuration and run time
...
foo={{bar}}
...