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

TER*_*ytE 5 spring constructor properties maven

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

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

<bean id="theVar" class="java.lang.String">
    <constructor-arg value="${varName}"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

"varName"现在从属性文件移动到系统属性.它在我启动Maven构建时添加:

mvn clean install -DvarName=data
Run Code Online (Sandbox Code Playgroud)

我想在不指定varName的情况下运行我的构建:

mvn clean install
Run Code Online (Sandbox Code Playgroud)

有没有办法在我的spring配置中默认varName?虽然这不起作用,但我正在寻找的一个概念性例子是:

<bean id="theVar" class="java.lang.String">
    <constructor-arg value="${varName}" default="theDefaultValue"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

FrV*_*aBe 7

Spring 3.0.x支持这样的语法:

value="${varName:defaultValue}"
Run Code Online (Sandbox Code Playgroud)

参考文献:


TER*_*ytE 4

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

例如,给定:

<!-- my spring config file -->
<context:property-placeholder location="classpath:default.properties" system-properties-mode="OVERRIDE"/>
Run Code Online (Sandbox Code Playgroud)

和:

# default.properties file
theVariable=One
Run Code Online (Sandbox Code Playgroud)

当我执行时:

mvn clean install
Run Code Online (Sandbox Code Playgroud)

为变量选取“一”。如果我执行:

mvn clean install -DtheVariable=Two
Run Code Online (Sandbox Code Playgroud)

取而代之的是“二”。