2013-07-26 24 views

回答

2

正如你已經在使用公共資源配置API,它已經提供了一個鉤狀他們已經低於其documentation for optional configuration resources解釋。

這種方式是在您的默認外的出廠配置仍駐留在Web應用程序本身的意義遠穩健。但是你仍然可以使用外部配置XML文件覆蓋任何你想要的屬性。

在我們的項目,我們通過提供在注入外部config.xml文件到使用系統級性能的系統中廣泛使用這個。我們做了如下的事情。

<configuration> 
<header> 
    <result forceReloadCheck="true"> 
     <nodeCombiner 
      config-class="org.apache.commons.configuration.tree.OverrideCombiner" /> 
    </result> 

</header> 
    <system/> 
    <configuration fileName="${ext.config}" forceReloadCheck="true" config-optional="true"> 
     <reloadingStrategy refreshDelay="10000" 
     config-class="org.apache.commons.configuration.reloading.FileChangedReloadingStrategy" /> 
     </configuration> 
    <configuration fileName="com/company/config/config.xml"></configuration>  
</configuration> 

此XML配置文件可以確保你的web應用加載成功地與外的出廠配置,並在同一時間,可選檢查的external.config系統屬性,它可以指向一個完全替代配置覆蓋Web應用程序中定義的任意屬性。

+0

你是如何定義'$ {ext.config}'的?作爲一個JVM爭論'-Dext.config'? –

+0

config.xml中的標記可確保您可以訪問所有屬性。這就是爲什麼我們應該提及它作爲首先加載。您可以將ext.config定義爲-Dext.config = saratbeesa

0

你可以

  1. 使用的Web應用程序級別定義的屬性設置爲指向該文件(這樣的數據中心可以改變位置)
  2. 就直接讀取(無需額外的庫)

例子:

final Properties p = new Properties(); 
p.load(new FileInputStream(new File(System.getProperty("...")))); 

您應該只重從Web層(Servlet,JSP)中加入它,但不加入EJB。


至於WebSphere,您可以在控制檯中添加一個Web應用程序特定屬性。它深藏不露,尋找「應用程序服務器 - xxx - 進程定義 - JVM - 自定義屬性」。至於Tomcat,我並不知道web應用程序的具體方式,但是您可以在.../bin/setenv.sh(Windows的setenv.bat)中定義系統屬性。我通常會預先附加一個唯一的前綴(例如應用程序的名稱),以免這些干擾。

+0

如何在Web應用程序級別定義它? –

+0

@HimanshuYadav我已經更新了答案。 – Beryllium

0

您可以通過定義系統屬性輕鬆實現該功能,我們稱之爲configLocation。應用程序應該讀取由系統屬性指定的位置,而不是從類路徑中讀取屬性文件。當然,您需要使用定義的系統屬性啓動Tomcat和WebSphere:-DconfigLocation=/path/to/config.properties

請注意,您還應該處理該文件不存在或無法讀取的情況。可能的選項包括無法啓動應用程序,或回退到故障安全配置。

相關問題