복붙노트

[SPRING] Spring에로드 된 Props 파일의 속성에 대해 후행 공백을 자동으로 자릅니다.

SPRING

Spring에로드 된 Props 파일의 속성에 대해 후행 공백을 자동으로 자릅니다.

PropertiesFactoryBean을 사용하여 일반적인 Properties 파일에서 속성을로드합니다. 어쨌든 스프링이 자동적으로 뒷좌석 공백을 프롭 값에서 제거하도록할까요?

해결법

  1. ==============================

    1.사용자 정의 PropertiesPersister를 PropertiesFactoryBean 구성에 전달하여 특성로드 기능을 사용자 정의 할 수 있습니다. PropertiesPersister 인스턴스는 PropertiesFactoryBean에 의해 사용되어 Properties 파일 데이터를 구문 분석합니다. 디폴트 구현은 java.util.Properties의 네이티브 구문 분석을 따릅니다. PropertiesPersister 인터페이스를 직접 구현하여 파싱 논리를 사용자 정의 할 수 있습니다.

    사용자 정의 PropertiesPersister를 PropertiesFactoryBean 구성에 전달하여 특성로드 기능을 사용자 정의 할 수 있습니다. PropertiesPersister 인스턴스는 PropertiesFactoryBean에 의해 사용되어 Properties 파일 데이터를 구문 분석합니다. 디폴트 구현은 java.util.Properties의 네이티브 구문 분석을 따릅니다. PropertiesPersister 인터페이스를 직접 구현하여 파싱 논리를 사용자 정의 할 수 있습니다.

  2. ==============================

    2.Chad가 말한 것처럼, Spring은 버전 4.3RC1로이 문제를 해결했습니다. 하지만 trimValues ​​매개 변수를 사용하여 트림 기능을 수동으로 설정해야합니다 (기본값 : "false").

    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>
    

    이에 대한 문서를 찾지 못했지만 스프링 API에서 추론합니다.

  3. ==============================

    3.자신의 속성 구성자를 정의 할 수 있습니다.

    자신의 속성 구성자를 정의 할 수 있습니다.

    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이 throw됩니다.

  4. ==============================

    4.최신 Spring 버전 (4.3 이상)에서는 구성에 PropertySourcesPlaceholderConfigurer bean을 만들 때 setTrimValues ​​()를 true로 호출하면됩니다. 그러면 속성 파일에서 얻은 값에서 추가 또는 공백이 제거됩니다.

    최신 Spring 버전 (4.3 이상)에서는 구성에 PropertySourcesPlaceholderConfigurer bean을 만들 때 setTrimValues ​​()를 true로 호출하면됩니다. 그러면 속성 파일에서 얻은 값에서 추가 또는 공백이 제거됩니다.

  5. from https://stackoverflow.com/questions/7031905/automatically-trim-trailing-white-space-for-properties-in-props-file-loaded-into by cc-by-sa and MIT license