我正在努力尋找解決方案,以根據不同的環境從不同的地方訪問配置文件(dev
,prod
)。從不同位置加載屬性
這是我的項目的大致佈局。
│ pom.xml
└───src
└───main
├───java
│ ConfigurationLoader.java
├───resources
│ conf1.properties
└───webapp
│ web.xml
└───WEB-INF
ConfigurationLoader
是一個自我描述類和被認爲是一些純單,整個應用程序靜態可用。
在dev
環境應該從classpath中加載根conf1.properties
,但在prod
ENV應該在容器的根文件夾(例如:%TOMCAT_HOME%\bin
)找到它們。
如何正確實施ConfigurationLoader
這種選擇性屬性加載?
感謝
UPD:
我更感興趣的是ConfigurationLoader
實施和屬性文件的位置。問題是,如何找到這些文件ConfigurationLoader
。喜歡的東西:
String path = "/conf1.properties";
File confFile;
switch (environment) {
case "dev": //classpath
URI location = ConfigurationLoader.class.getResource(path).toURI();
confFile = new File(location);
break;
case "prod": //root (?)
confFile = new File(path);
break;
}
Properties p = new Properties(confFile);
又來了幾個問題:
我應該如何通過環境變量的代碼的Maven(在配置文件中定義或其他)?我不想過濾java類,並且可能僅用環境條目預加載另一個屬性文件。另外,我不認爲我能夠在生產平臺上修改系統屬性(
-Denv=whatever
)。如果什麼樣的屬性文件需要包含一些資源路徑的其他系統組件(例如:
applicationContext.xml
春天也應該安排在類路徑dev
或在bin
Tomcat的文件夾)進行訪問?這些路徑應該是什麼樣的,我需要如何在我的代碼中解決這些問題,從而避免代碼重複的ConfigurationLoader
部分?
是否有機會更多地在maven中解決它,而在代碼中更少,或存在其他方法?
你能不能定義環境的2種,並用if語句什麼環境現狀您正在使用的那一刻檢查?這可能在你的設置文件或類似的東西。 – Reshad