programing

응용 프로그램 컨텍스트에 여러 PropertyPlaceHolderConfigurer를 둘 수 있습니까?

starjava 2023. 8. 10. 18:08
반응형

응용 프로그램 컨텍스트에 여러 PropertyPlaceHolderConfigurer를 둘 수 있습니까?

특정 항목을 로드해야 합니다.applicationContext.xml지정된 시스템 속성에 따라 파일을 만듭니다.이 자체는 실제 구성이 포함된 파일을 로드합니다.그러므로 나는 두 개가 필요합니다.PropertyPlaceHolderConfigurer하나는 시스템 매개 변수를 해결하고 다른 하나는 실제 구성 내에 있습니다.

어떻게 해야 할지 생각나는 게 있나요?

예, 둘 이상을 수행할 수 있습니다.첫 번째 플레이스홀더가 확인할 수 없는 플레이스홀더를 무시하도록 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>

응용 프로그램에 따라 시스템 속성을 조사해야 합니다.모드에서는 파일에서 속성을 로드할 수 있지만 설정된 경우 시스템 속성이 속성 파일의 값을 재정의할 수 있습니다.

다른 해결 방법은 PropertyPlaceholderConfigurer의 자리 표시자 Prefix 속성을 사용하는 것입니다.두 번째(세 번째, 네 번째...) 구성자에 대해 이 이름을 지정한 다음 모든 해당 자리 표시자 앞에 붙이면 충돌이 발생하지 않습니다.

<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}"/>

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

여러 명이 로컬로 작업할 수 없습니다.하지만 아직은 나 자신을 제외하고는 누구도 비난하지 않습니다.

내 쪽에서는 PropertyPlaceholderConfigurer 두 가지 속성을 모두 사용하여 재생합니다.

  • 순서(첫 번째 액세스/파싱된 PPC의 경우 더 낮아야 함)
  • 확인할 수 없는 자리 표시자 무시("처음 액세스/파싱된 PPC의 경우 false", 다음 PPC의 경우 "true")

  • 또한 두 PPC 모두에 2개의 고유 ID를 제공합니다(하나가 다른 하나에 의해 덮어쓰지 않도록).

완벽하게 작동합니다.

도움이 되길 바랍니다.

이를 직접 수행할 수는 없으며, Spring의 이번 JIRA 호에서 그 이유를 설명합니다(자세한 설명은 Chris Beams의 의견을 참조하십시오)

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

그러나 Spring 3.1 이상을 사용하면 PropertyPlaceholderConfigurer 클래스 대신 PropertySourcesPlaceholderConfigurer 클래스를 사용할 수 있습니다.

Spring 프레임워크 문제 github에서 문제와 해결책을 보여주는 Maven 기반 프로젝트를 다운로드할 수 있습니다.

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

다운로드한 프로젝트에서 문제 번호 SPR-6428을 찾습니다.

우리는 다음과 같은 접근 방식을 사용하고 있습니다.

<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구성 파일의 경로를 재정의하는 데 사용할 수 있습니다.

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

두 개의 다른 아이디를 주는 것만으로도 저는 효과가 있었습니다.스프링 3.0.4를 사용하고 있습니다.

도움이 되길 바랍니다.

이 경우 두 개의 PPC를 정의하고 독립적으로 사용해야 합니다.자리 표시자 Prefix 속성을 설정하여 원하는 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;

언급URL : https://stackoverflow.com/questions/686635/is-it-possible-to-have-multiple-propertyplaceholderconfigurer-in-my-applicationc

반응형