내 applicationContext에 여러 PropertyPlaceHolderConfigurer를 가질 수 있습니까?
주어진 시스템 속성에 따라 특정 applicationContext.xml 파일을로드해야합니다. 이것 자체가 실제 구성으로 파일을로드합니다. 따라서 2 개의 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>
응용 프로그램에 따라 systemPropertiesMode를 조사해야하며 파일에서 속성을로드 할 수 있지만 시스템 속성이 설정된 경우 속성 파일의 값을 재정의 할 수 있습니다.
여러 구성자와 관련된 버그가있을 수 있습니다. 자세한 내용은 http://jira.spring.io/browse/SPR-5719 를 참조하십시오.
여러 사람이 현지에서 일할 수는 없지만 아직 나 자신을 비난하는 것은 아닙니다.
또 다른 해결책은 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}"/>
이 작업을 직접 수행 할 수는 없으며 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을 찾으십시오.
내 자신의 측면에서 PropertyPlaceholderConfigurer를 사용하여 두 가지 속성을 모두 사용합니다.
- 순서 (첫 번째 액세스 / 파싱 된 PPC의 경우 더 낮아야 함)
ignoreUnresolvablePlaceholders (첫 번째 액세스 / 파싱 된 PPC의 경우 "false", 다음 PPC의 경우 "true")
또한 두 PPC에 2 개의 고유 한 ID를 제공합니다 (하나가 다른 하나에 의해 덮어 쓰기되는 것을 방지하기 위해)
완벽하게 작동
도움이되기를 바랍니다.
다음과 같은 접근 방식이 작동합니다.
<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
을 사용하여 구성 파일 경로를 재정의 할 수 있습니다.
그리고 애플리케이션은 공통 모듈에서 기본값으로 정의 할 수없는 자리 표시 자에 대한 일부 기본값을 번들로 제공합니다.
Just giving 2 distinct ids worked for me. I am using spring 3.0.4.
Hope that helps.
In case, you need to define two PPC's (like in my situation) and use them independently. By setting property placeholderPrefix, you can retrieve values from desired PPC. This will be handy when both set of PPC's properties has same keys, and if you don't use this the property of ppc2 will override ppc1.
Defining your 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>
Retrieving during Run time:
@Value(value = "$prefix1-{name}")
private String myPropValue1;
@Value(value = "$prefix2-{name}")
private String myPropValue2;
ReferenceURL : https://stackoverflow.com/questions/686635/is-it-possible-to-have-multiple-propertyplaceholderconfigurer-in-my-applicationc
'IT Share you' 카테고리의 다른 글
Kotlin에서 동시에 많은 예외를 포착하는 방법 (0) | 2021.01.08 |
---|---|
IE에서 콘텐츠를 자르는 고정 너비가있는 드롭 다운 선택 (0) | 2021.01.08 |
ByteArrayOutputStream을 닫아도 효과가 없습니까? (0) | 2021.01.07 |
node.js로 기본 Ajax 보내기 / 받기 (0) | 2021.01.07 |
엔티티가 dbContext에 연결되었는지 여부를 확인하는 가장 합리적인 방법은 무엇입니까? (0) | 2021.01.07 |