我刚开始学习OSGi和骆驼,我正在研究一些已经实现的服务。我有一个被配置为使用OSGi蓝图的帮助下有点像这对ServiceMix的运行包:从骆驼属性占位符中填充java.util.Properties
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel-cxf="http://camel.apache.org/schema/blueprint/cxf"
xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/blueprint/core"
xsi:schemaLocation="
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd
http://camel.apache.org/schema/blueprint/cxf http://camel.apache.org/schema/blueprint/cxf/camel-cxf.xsd">
<camelContext id="ctx1"
xmlns="http://camel.apache.org/schema/blueprint"
xsi:schemaLocation="http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<propertyPlaceholder location="properties/config.properties"/>
<routeBuilder ref="..." />
</camelContext>
目前,config.properties
位于包内,但我想它外部化。
于是,我改变了我的蓝图:
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel-cxf="http://camel.apache.org/schema/blueprint/cxf"
xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/blueprint/core"
xsi:schemaLocation="
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd
http://camel.apache.org/schema/blueprint/cxf http://camel.apache.org/schema/blueprint/cxf/camel-cxf.xsd">
<camelContext id="ctx1"
xmlns="http://camel.apache.org/schema/blueprint"
xsi:schemaLocation="http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<propertyPlaceholder location="${karaf.home}/etc/config.properties"/>
<routeBuilder ref="..." />
</camelContext>
...这配置工作完全正常。
我面临的问题是,该属性文件也通过java.util.properties在多个位置中使用,该文件作为简单文件加载到util文件中的静态代码块中。
我可以在我的Java代码(骆驼代码除外)中使用在骆驼上下文中加载的属性吗?
如果这是不可能的,我应该那么如何加载位于ServiceMix的类路径中属性文件要在这两个背景下的骆驼和Java代码中使用,用最少的代码在我的当前实现改变。
我不认为我完全理解你的实现。这是什么Myconfig接口,我如何使用它来提取属性?你可以请详细说明或者可以指点我一些例子吗? – ishan
以示例更新。如果您需要很多属性,我认为最好的方法是导出字典或将其转换为Map。其他方法只是为了举例,不一定是最佳实践。 –
该实现派生自两个接口..你公开你想要的方法(在你的情况下,也许你只需要像'Map getProperties()')和ManagedService(OSGI)来读取属性并更新Bean。 –