我剛開始學習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。 –