如何知道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