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