Java 自动修剪加载到Spring中的Props文件中属性的尾部空白

Java 自动修剪加载到Spring中的Props文件中属性的尾部空白,java,spring,configuration,properties,Java,Spring,Configuration,Properties,我使用PropertiesFactoryBean从典型的属性文件加载属性。还有什么方法可以让Spring自动从属性值中修剪尾部空白吗?您可以通过将自定义的PropertiesPersister传递到PropertiesFactoryBean配置中来自定义属性加载功能。PropertiesPersister实例被PropertiesFactoryBean用来解析属性文件数据。默认实现遵循java.util.Properties的本机解析。您可以通过提供自己的PropertiesPersister接

我使用PropertiesFactoryBean从典型的属性文件加载属性。还有什么方法可以让Spring自动从属性值中修剪尾部空白吗?

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

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

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>

如果文件中不存在属性,则会引发NullPointerException。正如Chad所说,Spring在4.3RC1版本中解决了这个问题。但您需要使用参数“trimValues”手动设置trim函数,如下所示(默认值为“false”):


...


我没有找到任何关于这方面的文档,但我从Spring API中推断出来。

对于最新的Spring版本(4.3+),在配置中创建PropertySourcesPlaceholderConfigurer bean时,只需使用true调用setTrimValues()。这将从属性文件中获得的值中删除任何额外的前导空格或尾随空格。

由于这在使用Spring Boot时经常会引起混淆,我想补充一点,您不需要XML配置来提供自己的
PropertyPlaceHolderConfigure

简单地把它放在你的主类中:

@Bean
公共静态属性资源占位符配置器CreatePropertyConfigure()
{
PropertySourcesPlaceholderConfigurer PropertySourcesPlaceholderConfigurer=新的PropertySourcesPlaceholderConfigurer();
PropertyConfigure.setTrimValues(true);
返回属性配置器;
}

这足以从
application.properties

FWIW中修剪值,不过Spring可以在不太频繁的活动中自行完成这项工作;)有什么参考资料吗?
@Value( value = "#{applicationProperties['my.app.property'].trim()}" )
 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="trimValues" value="true"/>
   <property name="locations">
       <list>
        ...
       </list>
   </property>