【问题标题】:Automatically Trim Trailing White Space for properties in Props file loaded into Spring自动修剪加载到 Spring 中的 Props 文件中属性的尾随空格
【发布时间】:2011-10-25 07:18:43
【问题描述】:

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

【问题讨论】:

    标签: java spring configuration properties


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

      【解决方案3】:

      正如 Chad 所说,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 中推断出来。

      【讨论】:

        【解决方案4】:

        使用最新的 Spring 版本(4.3+),当您在配置中创建 PropertySourcesPlaceholderConfigurer bean 时,您可以简单地调用 setTrimValues() 并设置为 true。这将从您从属性文件中获得的值中删除任何额外的前导或尾随空格。

        【讨论】:

          【解决方案5】:

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

          只需将它放在你的主类中:

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

          这足以修剪来自application.properties 的值。

          【讨论】:

          • 第一次尝试就成功了!!谢谢!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-26
          • 2021-03-17
          • 1970-01-01
          • 1970-01-01
          • 2013-03-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多