java – 基于Spring的Web应用程序的特定于环境的配置?

如何知道Web应用程序的部署环境,例如无论是本地的,dev,qa还是prod等.有没有办法我可以在运行时在spring应用程序上下文文件中确定这一点?
最佳答案
不要为您的代码添加逻辑来测试您正在运行的环境 – 这是灾难的秘诀(或至少燃烧大量午夜的油).

你使用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)从.properties文件或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-server:8080 /”.

有关如何加载属性值的更多详细信息,请参阅Spring文档.

转载注明原文:java – 基于Spring的Web应用程序的特定于环境的配置? - 代码日志