복붙노트

[SPRING] 내 applicationContext에 PropertyPlaceHolderConfigurer를 여러 개 가질 수 있습니까?

SPRING

내 applicationContext에 PropertyPlaceHolderConfigurer를 여러 개 가질 수 있습니까?

주어진 system 속성에 따라 특정 applicationContext.xml 파일을로드해야합니다. 이 자체는 실제 구성으로 파일을로드합니다. 따라서 2 개의 PropertyPlaceHolderConfigurer가 필요합니다. 하나는 System param을 해결하고 다른 하나는 실제 구성을 해결합니다.

어떤 아이디어가 이것을 어떻게?

해결법

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

    1.예, 둘 이상을 할 수 있습니다. ignoreUnresolvablePlaceholders는 반드시 해결할 수없는 자리 표시자를 무시하도록 설정해야합니다.

    예, 둘 이상을 할 수 있습니다. ignoreUnresolvablePlaceholders는 반드시 해결할 수없는 자리 표시자를 무시하도록 설정해야합니다.

    <bean id="ppConfig1" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="ignoreUnresolvablePlaceholders" value="true"/>
       <property name="locations">
        <list>
                 <value>classpath*:/my.properties</value>
        </list>
      </property>
    </bean>
    
    <bean id="ppConfig2" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="ignoreUnresolvablePlaceholders" value="false"/>
       <property name="locations">
        <list>
                 <value>classpath*:/myOther.properties</value>
        </list>
      </property>
    </bean>
    

    응용 프로그램에 따라 systemPropertiesMode를 조사해야합니다.이 옵션을 사용하면 파일에서 속성을로드 할 수 있지만 시스템 속성을 설정하면 속성 파일의 값을 재정의 할 수 있습니다.

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

    2.여러 구성자와 관련된 버그가있을 수 있습니다. 자세한 내용은 http://jira.spring.io/browse/SPR-5719를 참조하십시오.

    여러 구성자와 관련된 버그가있을 수 있습니다. 자세한 내용은 http://jira.spring.io/browse/SPR-5719를 참조하십시오.

    나는 여러 곳에서 일할 수는 없지만 ... 그러나 나는 아직 누구도 탓하지 않고있다.

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

    3.또 다른 해결책은 PropertyPlaceholderConfigurer의 placeholderPrefix 속성을 사용하는 것입니다. 두 번째 (셋째, 네 번째 ...) 구성자를 지정하고 모든 해당 자리 표시 자에 접두사를 붙이면 충돌이 발생하지 않습니다.

    또 다른 해결책은 PropertyPlaceholderConfigurer의 placeholderPrefix 속성을 사용하는 것입니다. 두 번째 (셋째, 네 번째 ...) 구성자를 지정하고 모든 해당 자리 표시 자에 접두사를 붙이면 충돌이 발생하지 않습니다.

    <bean id="mySecondConfigurer"
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
            p:location="classpath:/myprops.properties" 
            p:placeholderPrefix="myprefix-"/>
    
    <bean class="com.mycompany.MyClass" p:myprop="${myprefix-value.from.myprops}"/>
    
  4. ==============================

    4.직접 할 수는 없으며, Spring의 JIRA 이슈에 대한 이유를 설명합니다 (자세한 설명은 Chris Beams의 설명을 확인하십시오).

    직접 할 수는 없으며, Spring의 JIRA 이슈에 대한 이유를 설명합니다 (자세한 설명은 Chris Beams의 설명을 확인하십시오).

    https://jira.springsource.org/browse/SPR-6428

    그러나 Spring 3.1 이상을 사용하는 해결 방법을 제공합니다.이 해결 방법은 PropertyPlaceholderConfigurer 클래스 대신 PropertySourcesPlaceholderConfigurer 클래스를 사용하는 것입니다.

    문제를 보여주는 Maven 기반 프로젝트를 다운로드 할 수 있으며, Spring 프레임 워크에서 github 문제를 해결할 수있다.

    https://github.com/SpringSource/spring-framework-issues

    다운로드 한 프로젝트에서 문제 번호 SPR-6428을 찾으십시오.

  5. ==============================

    5.내 측면에서는 PropertyPlaceholderConfigurer 두 가지 속성을 가지고 놀고 있습니다.

    내 측면에서는 PropertyPlaceholderConfigurer 두 가지 속성을 가지고 놀고 있습니다.

    완벽하게 작동합니다.

    희망이 도움이된다.

  6. ==============================

    6.우리는 다음과 같은 접근 방식을 사용합니다.

    우리는 다음과 같은 접근 방식을 사용합니다.

    <util:properties id="defaultProperties">
        <prop key="stand.name">DEV</prop>
        <prop key="host">localhost</prop>
    </util:properties>
    <context:property-placeholder 
        location="file:${app.properties.path:app.properties}" 
        properties-ref="defaultProperties"/>
    

    시스템 속성 app.properties.path를 사용하여 구성 파일의 경로를 무시할 수 있습니다.

    또한 응용 프로그램은 공통 모듈에서 기본값으로 정의 할 수없는 자리 표시 자의 일부 기본값을 묶습니다.

  7. ==============================

    7.저에게 맞는 2 개의 고유 한 ID를 제공하면됩니다. 나는 봄 3.0.4를 사용하고있다.

    저에게 맞는 2 개의 고유 한 ID를 제공하면됩니다. 나는 봄 3.0.4를 사용하고있다.

    희망이 도움이됩니다.

  8. ==============================

    8.경우에 따라 두 개의 PPC를 정의하고 (독립적으로 사용해야합니다.) placeholderPrefix 속성을 설정하여 원하는 PPC에서 값을 검색 할 수 있습니다. 이것은 두 PPC의 속성 집합이 같은 키를 가지고있을 때 유용 할 것이고, 이것을 사용하지 않으면 ppc2의 속성이 ppc1을 무시할 것입니다.

    경우에 따라 두 개의 PPC를 정의하고 (독립적으로 사용해야합니다.) placeholderPrefix 속성을 설정하여 원하는 PPC에서 값을 검색 할 수 있습니다. 이것은 두 PPC의 속성 집합이 같은 키를 가지고있을 때 유용 할 것이고, 이것을 사용하지 않으면 ppc2의 속성이 ppc1을 무시할 것입니다.

    XML 정의하기 :

    <bean name="ppc1"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="properties" ref="ref to your props1" />
            <property name="placeholderPrefix" value="$prefix1-{" />
        </bean>
    <bean name="ppc2"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="properties" ref="ref to your props2" />
            <property name="placeholderPrefix" value="$prefix2-{" />
        </bean>
    

    런타임 중 검색 중 :

    @Value(value = "$prefix1-{name}")
    private String myPropValue1;
    
    @Value(value = "$prefix2-{name}")
    private String myPropValue2;
    
  9. from https://stackoverflow.com/questions/686635/is-it-possible-to-have-multiple-propertyplaceholderconfigurer-in-my-applicationc by cc-by-sa and MIT license