복붙노트

[SPRING] 런타임시 스프링 웹 애플리케이션의 특성 파일 겹쳐 쓰기

SPRING

런타임시 스프링 웹 애플리케이션의 특성 파일 겹쳐 쓰기

아래의 PropertyPlaceholderConfigurer를 사용하여 스프링 웹 애플리케이션에 특성 파일을로드하고있다.

<bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:db.properties</value>
                <value>classpath:mail.properties</value>
            </list>
        </property>
    </bean>

이제 mail.properties의 일부 속성을 덮어 쓰고 싶습니다. 따라서 다음과 같이이 게시물을 읽은 응용 프로그램 컨텍스트 파일에 추가 항목을 만들었습니다.

<context:property-placeholder location="file:override.properties"
        order="-1" ignore-unresolvable="true" ignore-resource-not-found="true" />

그런 다음 Tomcat Server에서 실행 구성의 VM 인수에서 추가 항목을 제공했습니다.

-Dexternal.props = "/ Users / ArpitAggarwal / Desktop / override.properties"

재정의해야하는 일부 키에 대한 재정의 된 값이 있습니다.

그러나 WebApp는 override.properties에서 값을 선택하지 않습니다. 아무도 나를 알아내는 데 도움이 될 수 있습니까?

어떤 도움을 주시면 감사하겠습니다. 감사!

해결법

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

    1.내가 문제를 해결하기 위해 수행 한 작업은 $ {ext.properties.dir : classpath :} / override.properties와 같은 위치 속성을 다음과 같이 바꾼 것입니다.

    내가 문제를 해결하기 위해 수행 한 작업은 $ {ext.properties.dir : classpath :} / override.properties와 같은 위치 속성을 다음과 같이 바꾼 것입니다.

    <context:property-placeholder
            location="${ext.properties.dir:classpath:}/override.properties" order="-1"
            ignore-unresolvable="true" ignore-resource-not-found="true" />
    

    그리고 application-server / jvm에서 ext.properties.dir 값을 다음과 같이 제공했습니다 :

    -Dext.properties.dir=file:/Users/ArpitAggarwal/properties/
    

    참고 자료 : spring을 가지고있는 6 가지 팁 - 관리 - 속성 - 파일들.

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

    2.여러 속성 자리 표시 자와 작업하는 것은 goog 아이디어가 아니라고 생각합니다. 두 개의 XML 구성이 동일한 컨텍스트에서 각 속성을로드하고 교차 사용하려고하면 많은 문제가있었습니다.

    여러 속성 자리 표시 자와 작업하는 것은 goog 아이디어가 아니라고 생각합니다. 두 개의 XML 구성이 동일한 컨텍스트에서 각 속성을로드하고 교차 사용하려고하면 많은 문제가있었습니다.

    속성 파일을 외부화하려는 경우 JNDI 속성을 제안합니다.

    <bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:db.properties</value>
                <value>classpath:mail.properties</value>
                <value>${java:com/env/myApp/externalProperties}
            </list>
        </property>
    </bean>
    

    이 JNDI의 값은 "file : / path-to-propertiesFile"입니다.

    이렇게하면 propertyePlaceholder가 하나만 필요합니다. 또한 외부 파일을 마지막 위치로두면 중복 된 키가 있으면 스프링이 마지막 키만 유지합니다.

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

    3.응용 프로그램 컨텍스트에서 사용하면됩니다.

    응용 프로그램 컨텍스트에서 사용하면됩니다.

    <context:property-placeholder location="file:///${external.props}"
        order="-1" ignore-unresolvable="true" ignore-resource-not-found="true" />
    

    문제는 방금 잘못 사용 된 위치입니다, 실제 위치는 VM arg 변수입니다 key => $ {external.props}

  4. from https://stackoverflow.com/questions/33184807/override-properties-file-in-spring-webapp-at-runtime by cc-by-sa and MIT license