我可以在spring配置文件中为构造函数arg默认一个系统属性吗?

我可以在spring配置文件中为构造函数arg默认一个系统属性吗?,spring,maven,constructor,properties,Spring,Maven,Constructor,Properties,我有一个spring配置文件,其中包括以下元素: <context:property-placeholder location="classpath:default.properties"/> <bean id="theVar" class="java.lang.String"> <constructor-arg value="${varName}"/> </bean> 我还希望在不指定varName的情况下运行生成: mvn clea

我有一个spring配置文件,其中包括以下元素:

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

<bean id="theVar" class="java.lang.String">
    <constructor-arg value="${varName}"/>
</bean>
我还希望在不指定varName的情况下运行生成:

mvn clean install
在我的spring配置中是否有默认varName的方法?虽然这不起作用,但我正在寻找的一个概念性示例是:

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

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

例如,假设:

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

mvn clean install
mvn clean install -DtheVariable=Two
为变量选择“一”。如果我执行:

mvn clean install
mvn clean install -DtheVariable=Two

取而代之的是“2”。

我不确定这是否有帮助,但如果您正在注释类,并且在系统属性不存在时需要一个默认值,则我当前会这样做:

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

Spring 3.0.x支持如下语法:

value="${varName:defaultValue}"
参考资料:

  • (PropertyPlaceHolderConfigure支持“${myKey:myDefaultValue}”默认语法)

可以按照@sebastien所述进行,但可以在配置文件中根据需要进行:

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


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

它是否需要是系统属性?可以在另一个文件中指定它吗?它需要在构建时是动态的。我愿意听取关于如何做的建议。我需要在调用生成时为varName指定不同的值,并且我还需要在不指定varName的情况下调用生成。指定多个属性文件会有帮助吗?
location
元素支持多个以逗号(,)分隔的文件。您可以指定另一个包含“系统默认值”的文件,如果无法通过
classpath:default.properties
解析该文件,则它将尝试通过下一个属性文件解析。我正在其他配置中执行此操作。本例中的问题是,它将处理变更的责任转移到另一个系统,然后该系统必须管理该文件。然后,我必须在任何构建之前找到更新文件的方法。在我的本地开发机器上很容易做到这一点,但在CI构建服务器上更难做到这一点。在使用系统属性的CI生成计算机上处理此变体很容易。看起来“systemPropertiesMode”可能会起作用。看着它。