2015-02-08 28 views
2

我有一個使用spring初始化並使用maven構建的web應用程序。 使用靜態存在的屬性文件加載各種屬性。由於各種環境對於相同的屬性需要不同的值,我使用maven配置文件根據構建時的環境加載不同的屬性文件。例如: 例如: - 開發環境的dev.properties和生產環境的prod.properties。如何使用zookeeper作爲基於彈簧的Web應用程序的數據源加載屬性?

現在我想使構建獨立的屬性文件, 屬性的值會從一些數據源(飼養員)上下文初始化過程中獲取。

如何在上下文初始化之前加載屬性?

+0

我已經搜索谷歌,但不能得到明確的答案。混淆各種鉤子之間的彈簧提供了初始化。任何線索都會有所幫助。 – Shivendra 2015-02-08 18:54:05

+0

**春季配置文件**來救援! http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-environment – 2015-02-08 18:56:32

+0

我不想指定'dev'或'production'。無論我作爲環境變量提供什麼,它都應該查詢數據源並加載適當的屬性。這甚至可能是一個'xyz'環境,我事先不知道@ArtemBilan – Shivendra 2015-02-08 19:10:10

回答

0

Properties只是Java類中的一個,Apache Configuration項目正好提供了這樣的抽象。我剛剛向你展示了一個JDBC示例,但其中還有很多其他的東西。這裏有一個例子我如何加載從DB StoredProcedure的屬性:

<jee:jndi-lookup id="dataSource" jndi-name="DS"/> 

<bean id="storedProcedureConfiguration" class="com.my.proj.config.StoredProcedureConfiguration" 
     p:dataSource-ref="dataSource" 
     p:sqlQuery="pki_props.getProperties"/> 


<bean id="propertiesFromDB" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" 
     p:staticMethod="org.apache.commons.configuration.ConfigurationConverter.getProperties" 
     p:arguments-ref="storedProcedureConfiguration"/> 

<context:property-placeholder properties-ref="propertiesFromDB"/> 

所以,你可以實現自己的AbstractConfiguration從動物園管理員加載Properties,並將它注入到<context:property-placeholder>

0

在java構造函數中,只需設置一個連接到Zookeeper服務器並使用zookeeper客戶端方法獲取所需的數據。你可以在這裏找到例子:http://zookeeper.apache.org/doc/trunk/javaExample.html

它應該是這樣的(但你必須來闡述這一點)

public YourConstructor() { 
Zookeeper zk = new ZooKeeper(host,...); 
zk.getData(...); 
} 
+0

我將如何確保在bean初始化之前這些屬性已被替換? – Shivendra 2015-02-10 17:50:54

+0

如果getdata或連接失敗,您可以捕獲異常 – 2015-02-10 18:00:24

相關問題