2012-02-24 33 views
5

我有一个弹簧的配置文件,其包括以下元件:我可以在spring配置文件中为constructor-arg默认一个系统属性吗?

<context:property-placeholder location="classpath:default.properties"/> 

<bean id="theVar" class="java.lang.String"> 
    <constructor-arg value="${varName}"/> 
</bean> 

“的varName”现在移动从属性文件系统属性。

mvn clean install -DvarName=data 

我也想运行我的生成,而无需指定的varName:

mvn clean install 

是否有某种方式为默认的varName在我的Spring配置,当我开始一个Maven构建它被添加?虽然这是不行的,什么我要寻找一个概念上的例子是:

<bean id="theVar" class="java.lang.String"> 
    <constructor-arg value="${varName}" default="theDefaultValue"/> 
</bean> 
+0

是否需要成为系统属性?它可以在另一个文件中指定吗? – 2012-02-24 18:47:08

+0

在构建时需要动态。我很乐意接受如何提供建议。我需要在调用构建时为varName指定不同的值,并且我还需要在不指定varName的情况下调用构建。 – TERACytE 2012-02-24 18:58:59

+0

指定多个属性文件有帮助吗?'location'元素支持用逗号(,)分隔的多个文件。您可以指定另一个具有“系统默认值”的文件,如果它不能通过'classpath:default.properties'来解析,那么它会尝试通过下一个属性文件来解析。 – 2012-02-24 19:05:04

回答

4

事实证明,春季V2.5 +,如果有定义的系统属性,它可以用来代替的在属性文件中定义的属性。您只需确保使用相同的名称并启用“覆盖”选项。

例如,给定:

<!-- my spring config file --> 
<context:property-placeholder location="classpath:default.properties" system-properties-mode="OVERRIDE"/> 

和:

# default.properties file 
theVariable=One 

当我执行:

mvn clean install 

“一” 被拾取的theVariable。如果我执行:

mvn clean install -DtheVariable=Two 

代替“Two”。

3

我不知道这是否会帮助,但如果你是注释类和希望的默认值时,系统属性不存在,这是我目前做的:

@Value("#{systemProperties['fee.cc']?:'0.0225'}") 
public void setCcFeePercentage(BigDecimal ccFeePercentage) { 
    this.setCcFeePercentage(ccFeePercentage); 
} 
1

为@sebastien形容这是可以做到,但在配置文件中,只要你想:

<bean id="theVar" class="java.lang.String"> 
    <constructor-arg value="#{systemProperties['varName'] == null ? 'default_value' : systemProperties['varName']}"/> 
</bean> 

如果您的varName变量不存在,则会设置默认值。

相关问题