如何知道Web應用程序的部署環境,例如無論是本地,開發,QA或產品等。有沒有什麼辦法可以在運行時確定這在春天的應用程序上下文文件?基於Spring的Web應用程序的環境特定配置?
回答
不要爲你的代碼添加邏輯來測試你正在運行的環境 - 這是一個災難的食譜(或者至少在路上燒掉很多午夜油)。
你使用Spring,所以要利用它。使用依賴注入爲您的代碼提供特定於環境的參數。例如。如果你需要調用在測試和生產不同的端點Web服務,做這樣的事情:
public class ServiceFacade {
private String endpoint;
public void setEndpoint(String endpoint) {
this.endpoint = endpoint;
}
public void doStuffWithWebService() {
// use the value of endpoint to construct client
}
}
接下來,使用Spring的PropertyPlaceholderConfigurer(或可替代PropertyOverrideConfigurer)來,無論是從屬性文件填充這個屬性,或者從JVM系統屬性,像這樣:
<bean id="serviceFacade" class="ServiceFacade">
<property name="endpoint" value="${env.endpoint}"/>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:environment.properties</value>
</property>
</bean>
現在創建兩個(或三個或四個)文件,像這樣 - 每個不同的環境。
在environment-dev.properties:
env.endpoint=http://dev-server:8080/
在environment-test.properties:
env.endpoint=http://test-server:8080/
現在採取相應的屬性文件爲每個環境,重命名它只是environment.properties,並將其複製到應用程序服務器的lib目錄或其他應用程序的類路徑中的其他位置。例如。爲Tomcat:
cp environment-dev.properties $CATALINA_HOME/lib/environment.properties
現在部署應用程序 - Spring將替代價值的 「http:// dev的服務器:8080 /」 時,它建立在運行時你的endpoint屬性。
有關如何加載屬性值的更多詳細信息,請參閱Spring文檔。
我們在我們的應用程序中這樣做,但不在spring配置中。
在應用程序啓動期間(在上下文偵聽器中),我們讀取計算機的主機名並將匹配的產品,開發,qa信息存儲在靜態變量中。
我們不直接訪問變量(儘管可以),但我們有一個彈簧服務,該變量與該變量連接,以便訪問我們的服務器環境信息。
一種方法是查看System.getProperty(key)方法,它是純java。然而,這可能不是一個好主意,因爲你不應該在你的應用程序中做這種環境邏輯。
另一種方法是服務器配置(爲每個環境的服務器配置不同的應用程序上下文文件)。
Spring 3.1還引入了新的方法,用可互換的屬性文件「正確地」做這種事情。你應該看看unified property management blog。 m1 release announcement有更多的細節。
值得注意的是Spring 3.1 M1 introduced profiles support。這可能是這種需求的最終答案。所以請留意它。
同時,我親自做了帕維爾所描述的。
- 1. 基於Spring的Web應用程序的項目特定配置?
- 2. Spring + Hibernate應用程序的環境特定配置
- 3. 處理特定環境的配置在JavaScript應用程序
- 4. Play框架應用程序中環境特定的配置
- 5. 如何使用kubernetes配置環境特定的應用程序配置
- 6. 處理Java Web應用程序的環境特定設置的最佳實踐?
- 7. 基於Spring的Cloudbees應用程序中的BoneCP配置
- 8. Android應用程序環境配置
- 9. 在特定環境中部署Spring引導應用程序
- 10. Struts - 基於環境的配置
- 11. 使用app.get('env')設置特定於環境的配置
- 12. Flex基於web的應用程序中的圖像配置
- 13. j2ee web應用程序的特定於應用程序的配置/屬性/ APP_HOME的放置位置?
- 14. 基於Spring的Web應用程序中的Chunk HTTP響應
- 15. 環境的特定shoryuken配置
- 16. Scala環境下的特定配置
- 17. 與angularjs環境特定的配置
- 18. 集羣環境中基於Java的REST Web應用程序的會話管理
- 19. 適用於Web應用程序的安全環境Azure
- 20. Spring應用程序Jenkins部署環境
- 21. 配置基本URL取決於環境
- 22. 從POJO調用基於Spring的Web應用程序類
- 23. 應用程序配置(Spring?)
- 24. Spring Web Flow:在基於Spring Web Flow和JSF的應用程序中發佈
- 25. 關於Web應用程序環境中的Java Executor框架
- 26. 特定於環境的圖像(請提供TFS或Web配置建議)
- 27. 基於環境的express/node應用程序覆蓋config.js變量
- 28. 在Spring應用程序環境中讀取環境變量
- 29. 如何設置獨立的Web應用程序測試環境?
- 30. 在Undertow部署基於Spring的Web應用程序
感謝您的快速響應。你使用的例子是我正在使用的例子。我正在做的是創建一個類,其構造函數具有參數endpoint和客戶端代理。在appcontext.xml中,根據環境傳遞端點,使用映射,如 constructor-ard> –
Ritesh
2011-06-08 20:41:23
我的方法正確嗎? – Ritesh 2011-06-08 20:42:18
不完全;請參閱最新的回覆。 – Pavel 2011-06-08 20:52:23