Автоматически обрезать конечные пробелы для свойств в файле Props, загруженном в Spring - PullRequest
2 голосов
/ 11 августа 2011

Я использую PropertiesFactoryBean для загрузки свойств из типичного файла свойств. Есть ли способ заставить Spring автоматически обрезать конечный пробел из значения пропа?

Ответы [ 4 ]

3 голосов
/ 12 августа 2011

Вы можете настроить функцию загрузки Properties, передав пользовательский PropertiesPersister в конфигурацию PropertiesFactoryBean.Экземпляр PropertiesPersister используется PropertiesFactoryBean для анализа данных файла свойств.Реализация по умолчанию следует за собственным анализом java.util.Properties.Вы можете настроить логику синтаксического анализа, предоставив собственную реализацию интерфейса PropertiesPersister.

2 голосов
/ 02 ноября 2016

Как сказал Чад, Spring решил эту проблему с помощью версии 4.3RC1.Но вам нужно вручную установить функцию обрезки с параметром «trimValues», например, так (по умолчанию, если «false»):

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="trimValues" value="true"/>
   <property name="locations">
       <list>
        ...
       </list>
   </property>

Я не нашел никакой документации по этому вопросу, но выводэто из Spring API.

0 голосов
/ 14 ноября 2018

В последней версии Spring (4.3+) вы можете просто вызывать setTrimValues ​​() со значением true при создании bean-компонента PropertySourcesPlaceholderConfigurer в своей конфигурации. Это удалит все лишние начальные или конечные пробелы из значения, полученного из файла свойств.

0 голосов
/ 04 июля 2016

Вы можете определить свой собственный конфигуратор свойств:

package your.company.package;

public class TrimPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

@Override
protected String resolvePlaceholder( String placeholder, Properties props ) {
        String value = super.resolvePlaceholder( placeholder, props );

        return (value != null ? value.trim() : null );
    }
}

Тогда вы должны определить это в своем bean_config.xml

<bean id="applicationProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="location" value="classpath:main.properties" />
</bean>

<bean id="trimPropertyPlaceholderConfigurer" class="your.company.package.TrimPropertyPlaceholderConfigurer">
    <property name="properties" ref="applicationProperties" />
</bean>

Другой способ, если вы используете аннотации @Value для установки свойств в поля:

@Value( value = "#{applicationProperties['my.app.property'].trim()}" )

NullPointerException генерируется, если свойство не существует в файле

...