我正在使用PropertiesFactoryBean从典型的Properties文件加载属性。反正有没有让Spring从prop值自动修剪尾随空格?
答案 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。这样将从属性文件中获得的值中删除所有多余的前导或尾随空格。