自动修剪尾随空白区域以获取加载到Spring中的Props文件中的属性

时间:2011-08-11 19:46:12

标签: java spring configuration properties

我正在使用PropertiesFactoryBean从典型的Properties文件加载属性。反正有没有让Spring从prop值自动修剪尾随空格?

5 个答案:

答案 0 :(得分:3)

您可以通过将自定义Properties传入PropertiesPersister配置来自定义PropertiesFactoryBean加载功能。 PropertiesPersister实例使用PropertiesFactoryBean实例来解析属性文件数据。默认实现遵循java.util.Properties的本机解析。您可以通过提供自己的PropertiesPersister接口实现来自定义解析逻辑。

答案 1 :(得分:2)

正如Chad所说,Spring用版本4.3RC1解决了这个问题。但您需要使用参数" trimValues"手动设置修剪功能。像这样(默认如果"假"):

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

我没有找到任何关于此的文档,但我从Spring API中推断出它。

答案 2 :(得分:2)

由于使用Spring Boot时这通常会引起混乱,因此我想补充一点,不需要需要XML配置来提供自己的PropertyPlaceholderConfigurer

只需将其放在您的主班上:

  @Bean
  public static PropertySourcesPlaceholderConfigurer createPropertyConfigurer()
  {
    PropertySourcesPlaceholderConfigurer propertyConfigurer = new PropertySourcesPlaceholderConfigurer();
    propertyConfigurer.setTrimValues(true);
    return propertyConfigurer;
  }

这足以修剪application.properties中的值。

答案 3 :(得分:0)

您可以定义自己的属性配置器:

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

答案 4 :(得分:0)

在最新的Spring版本(4.3+)中,当在配置中创建PropertySourcesPlaceholderConfigurer bean时,可以简单地将setTrimValues()调用为true。这样将从属性文件中获得的值中删除所有多余的前导或尾随空格。