PropertyPlaceHolder весной - PullRequest
       1

PropertyPlaceHolder весной

1 голос
/ 21 ноября 2011

Весной мы получаем доступ к свойству java следующим образом:

<property name="fileSizeLimit" value="${someProperty}" />

Боб объявляет

int fileSizeLimit = 9999;

Как установить значение по умолчанию, если в файле свойств отсутствует «someProperty»?

ATM, мы получаем NumberFormatException, потому что Spring вызывает int-setter с именем свойства "someProperty". Когда свойство установлено, все работает нормально.

http://static.springsource.org/spring/docs/1.1.5/api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html говорит:

Значения свойств по умолчанию могут быть определены через «свойства», чтобы сделать переопределение определений в файлах свойств необязательно. Конфигуратор также проверит свойства системы (например, «user.dir»), если он не может разрешить заполнитель с любым из указанных свойства. Это можно настроить через "systemPropertiesMode".

Устанавливает ли это порядок, в котором ищутся свойства? Где я могу это настроить?

TIA, Bastl.

Ответы [ 4 ]

14 голосов
/ 21 ноября 2011

Для вашего первого вопроса вы можете установить значение по умолчанию для заполнителя, используя следующий синтаксис, где 9999 - это значение по умолчанию.

<property name="fileSizeLimit" value="${someProperty:9999}" />

Для вашего второго вопроса свойство systemPropertiesModeName определяет порядок, в котором свойства разрешаются, свойства файла в зависимости от системных свойств. Например,

<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>

Сообщает PropertyPlaceholderConfigurer просмотреть системное свойство перед файлом свойств.

Значения для systemPropertiesModeName:

SYSTEM_PROPERTIES_MODE_FALLBACK (default)
      Check system properties if not resolvable in the specified properties.
SYSTEM_PROPERTIES_MODE_NEVER 
      Never check system properties.
SYSTEM_PROPERTIES_MODE_OVERRIDE 
      Check system properties first, before trying the specified properties.

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

  1. Системное свойство
  2. Файл свойств
  3. Заполнитель по умолчанию
2 голосов
/ 21 ноября 2011

Вы можете определить значения по умолчанию для PropertyPlaceHolder в определении компонента в файле XML.

<bean 
   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
   id="corePlaceHolder">
            <property name="ignoreUnresolvablePlaceholders" value="true"/>
            <property name="systemPropertiesModeName" 
                         value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
            <property name="searchSystemEnvironment" value="true"/>
            <property name="locations">
            <list>
                <value>classpath*:config/*/......./*.properties</value>
            </list>
            </property>
            <property name="properties">  
              <props>  
               <prop key="fileSizeLimit">123</prop>  
              </props>  
            </property>  
</bean> 

Подробнее см. http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html

2 голосов
/ 21 ноября 2011

Весной 3 вы можете сделать ${someProperty:defaultValue}.Я действительно надеюсь, что вы не используете 1.1.5.

1 голос
/ 21 ноября 2011

При использовании PropertyPlaceholderConfigurer, согласно его Javadoc , «файл свойств заполнителя должен содержать запись для каждого определенного заполнителя».

Однако вы можете указать несколько мест(файлы свойств) для вашего PropertyPlaceholderConfigurer и используйте один из них по умолчанию.Таким образом, вы можете всегда иметь нужные значения по умолчанию.

Если вы хотите, чтобы ваше приложение выдавало исключение при использовании неопределенного свойства, убедитесь, что для " ignoreUnresolvablePlaceholder " установлено значениеfalse в вашем PropertyPlaceholderConfigurer.

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