部署适用于maven和spring的不同环境

时间:2012-08-07 16:20:51

标签: spring maven deployment

我有两个属性文件:

environment.properties:
 - project.host.db3.database.name=oracle

application.properties:
 - database.name=${project.host.db3.database.name}

第一个表示环境变量,第二个表示要在spring项目中使用的属性,在此配置中我尝试设置environment.properties但当然不起作用:

<bean id="systemPropertiesLoader"   
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject" value="#{@systemProperties}" />
        <property name="targetMethod" value="putAll" />
        <property name="arguments">
    <util:properties location="classpath:environment.properties" />
</property>
</bean>

<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
depends-on="systemPropertiesLoader">
<property name="locations">
    <list>
        <value>classpath:application.properties</value>
    </list>
</property>

<!-- bean using database.name -->

它可行吗?如果没有,人们如何在他们的项目中拥有不可知的属性(如database.name),并且只部署一个文件(war,jar等)?

1 个答案:

答案 0 :(得分:0)

好吧,只要你定义了你喜欢的属性,看起来它对于bean xml是可行的:

<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
depends-on="systemPropertiesLoader">

但是如果您尝试从servlet访问属性:

this.getClass().getClassLoader().getResourceAsStream("application.properties");
你有机会得到这个:

bad port configuration: ${project.host.db3.database.port}
java.lang.NumberFormatException: For input string: "${project.host.db3.database.port}"

在回答yorkw时,现在我可以在多个环境中部署相同的战争并使用-Denvironment = development配置主机,因此我可以部署用于开发,生产等的属性文件,并且只需使用:< / p>

<bean id="systemPropertiesLoader"   
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject" value="#{@systemProperties}" />
        <property name="targetMethod" value="putAll" />
        <property name="arguments">
    <util:properties location="classpath:**${environment}/**environment.properties" />
</property>
</bean>

否则我应该在部署之前替换application.properties以用于每个环境。我相信有更好的解决方案。