복붙노트

[SPRING] 여러 프로젝트 / 모듈에서 PropertyPlaceholderConfigurer를 통해 여러 속성 파일 사용

SPRING

여러 프로젝트 / 모듈에서 PropertyPlaceholderConfigurer를 통해 여러 속성 파일 사용

현재 여러 프로젝트 / 모듈로 분할 된 응용 프로그램을 작성 중입니다. 예를 들어 다음 모듈을 예로 들어 보겠습니다.

각 모듈에는 고유 한 Spring 컨텍스트 xml 파일이 있습니다. DAO 모듈의 경우 필요한 db 연결 매개 변수가있는 속성 파일을 읽는 PropertyPlaceholderConfigurer가 있습니다. jabber 모듈에는 jabber 연결 속성을위한 PropertyPlaceHolderConfigurer도 있습니다.

이제 myApp-DAO 및 myApp-jabber를 포함하는 주 응용 프로그램이 제공됩니다. 모든 컨텍스트 파일을 읽고 하나의 큰 Spring 컨텍스트를 시작합니다. 아쉽게도 컨텍스트마다 하나의 PropertyPlaceholderConfigurer 만있을 수 있으므로 먼저로드 된 모듈이 연결 매개 변수를 읽을 수 있습니다. 다른 하나는 "자리 표시 자 'jabber.host'를 해결할 수 없습니다."와 같은 오류가있는 예외를 발생시킵니다.

저는 문제가 무엇인지 이해하고 있지만 실제로 솔루션을 모르거나 유스 케이스에 대한 모범 사례를 알지 못합니다.

각 모듈이 자체 등록 정보 파일을로드 할 수 있도록 각 모듈을 구성하는 방법은 무엇입니까? 지금은 별도의 컨텍스트 파일에서 PropertyPlaceHolderConfigurer를 이동하고 기본 응용 프로그램의 컨텍스트 (모든 Property 파일을 단일 PropertyPlaceHolderConfigurer로로드)에 병합했습니다. 왜냐하면 dao 모듈을 사용하는 모든 사람들은 자신의 컨텍스트에서 PropertyPlaceHolderConfigurer가 필요하다는 것을 알고 있어야하기 때문입니다. dao 모듈의 통합 테스트도 실패합니다.

나는 stackoverflow 커뮤니티에서 솔루션 / 아이디어에 대해 듣고 궁금하다.

해결법

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

    1.관련된 각각의 컨텍스트에서 모든 장소 소유자가 확인할 수없는 키를 무시하는 경우 두 가지 방법 모두 작동합니다. 예 :

    관련된 각각의 컨텍스트에서 모든 장소 소유자가 확인할 수없는 키를 무시하는 경우 두 가지 방법 모두 작동합니다. 예 :

    <context:property-placeholder
    location="classpath:dao.properties,
              classpath:services.properties,
              classpath:user.properties"
    ignore-unresolvable="true"/>
    

    또는

        <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:dao.properties</value>
                    <value>classpath:services.properties</value>
                    <value>classpath:user.properties</value>
                </list>
            </property> 
            <property name="ignoreUnresolvablePlaceholders" value="true"/>
        </bean>
    
  2. ==============================

    2.나는 이것이 오래된 질문이라는 것을 알고있다. 그러나 무시할 수없는 속성은 나를 위해 일하지 않고 왜 그랬는지 모른다.

    나는 이것이 오래된 질문이라는 것을 알고있다. 그러나 무시할 수없는 속성은 나를 위해 일하지 않고 왜 그랬는지 모른다.

    문제는 외부 리소스 (location = "file : $ {CATALINA_HOME} /conf/db-override.properties"와 같은)가 필요하고 ignore-unresolvable = "true"가이 경우 작업을 수행하지 않는다는 것입니다.

    누락 된 외부 리소스를 무시하기 위해해야 ​​할 일은 다음과 같습니다.

    ignore-resource-not-found="true"
    

    누군가가이 문제에 부딪 힐 경우에 대비해.

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

    3.여러 PropertiesPlaceholderConfigurer Bean을 명시 적으로 선언하는 대신 요소를 여러 개 가질 수 있습니다.

    여러 PropertiesPlaceholderConfigurer Bean을 명시 적으로 선언하는 대신 요소를 여러 개 가질 수 있습니다.

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

    4.PropertiesPlaceholderConfigurer 빈에는 "propertiesArray"라는 대체 등록 정보가 있습니다. "properties"속성 대신이 속성을 사용하고 속성으로 속성을 ​​설정하십시오.

    PropertiesPlaceholderConfigurer 빈에는 "propertiesArray"라는 대체 등록 정보가 있습니다. "properties"속성 대신이 속성을 사용하고 속성으로 속성을 ​​설정하십시오.

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

    5.나는 아래의 해결책을 시도했다. 그것은 내 컴퓨터에서 작동한다.

    나는 아래의 해결책을 시도했다. 그것은 내 컴퓨터에서 작동한다.

    <context:property-placeholder location="classpath*:connection.properties" ignore-unresolvable="true" order="1" />
    
    <context:property-placeholder location="classpath*:general.properties" order="2"/>
    

    출처 : http://www.baeldung.com/2012/02/06/properties-with-spring/

  6. from https://stackoverflow.com/questions/3403773/using-multiple-property-files-via-propertyplaceholderconfigurer-in-multiple-pr by cc-by-sa and MIT license