Могу ли я установить системное свойство по умолчанию для конструктора-аргумента в файле конфигурации Spring? - PullRequest
5 голосов
/ 24 февраля 2012

У меня есть файл конфигурации Spring, который включает в себя следующие элементы:

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

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

"varName" теперь перемещено из файла свойств в системное свойство.Он добавляется, когда я запускаю сборку Maven:

mvn clean install -DvarName=data

Я также хочу запустить сборку без указания varName:

mvn clean install

Есть ли какой-нибудь способ по умолчанию использовать varName в моей веснеконфиг?Хотя это не работает, концептуальный пример того, что я ищу:

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

Ответы [ 4 ]

7 голосов
/ 25 февраля 2012

Spring 3.0.x поддерживает такой синтаксис:

value="${varName:defaultValue}"

Рекомендации:

4 голосов
/ 25 февраля 2012

Оказывается, что весной 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

«Один» подобран для переменной. Если я выполню:

mvn clean install -DtheVariable=Two

Вместо этого выбрано "Два".

3 голосов
/ 25 февраля 2012

Я не уверен, поможет ли это, но если вы аннотируете классы и хотите использовать значение по умолчанию, когда системное свойство отсутствует, то это то, что я сейчас делаю:

@Value("#{systemProperties['fee.cc']?:'0.0225'}")
public void setCcFeePercentage(BigDecimal ccFeePercentage) {
    this.setCcFeePercentage(ccFeePercentage);
}
1 голос
/ 25 февраля 2012

Это можно сделать, как описано в @sebastien, но в файле конфигурации можно так:

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

Если ваша переменная varName отсутствует, будет установлено значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...