Spring - PropertyPlaceholderConfigurer - 根据环境选择属性文件

时间:2012-05-31 23:27:02

标签: spring spring-mvc

我需要根据环境(dev,qa或prod)选择属性上下文文件,这是PropertyPlaceholderConfigurer的我的bean配置,

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>file:**/config/handsOn-${proj.env}.properties</value>
    </property>
</bean>

那么我如何使spring框架根据部署的环境选择正确的文件。

我可以根据部署的主机获取环境。使用以下代码,

InetAddress.getLocalHost().getHostName()

任何帮助将不胜感激.. !!

2 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。

  1. 查看弹簧属性注入。您可以在预定义的位置定义属性,只需确保右侧框中存在正确的属性&lt; util:properties location =“$ {path.to.properties.file}”/&gt;
  2. 如果您不想这样做,请考虑将环境类型注入JVM参数(例如-Denv.type = PROD)或类似的东西。然后你可以在春天使用这个属性。查看How do I read JVM arguments in the Spring applicationContext.xml了解如何操作。

答案 1 :(得分:1)

最后,我可以使用maven配置文件根据环境打包所需的.properties。我在dev,qa和prod中使用了不同的配置文件,如下所示,

<profiles>
        <profile>
            <id>dev</id>
            <activation>
              <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <version>2.4</version>
                        <executions>
                            <execution>
                                <id>copy-dev-resources</id>
                                <phase>process-resources</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                                <configuration>
                                    <!-- this is important -->
                                    <overwrite>true</overwrite>
                                    <!-- target -->
                                    <outputDirectory>${project.basedir}/WebContent/WEB-INF/config</outputDirectory>
                                    <resources>
                                        <resource>
                                            <!-- source -->
                                            <directory>${project.basedir}/WebContent/WEB-INF/config/dev</directory>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
</profiles>