복붙노트

[SPRING] Spring 컨텍스트에서 Maven settings.xml 속성 사용하기

SPRING

Spring 컨텍스트에서 Maven settings.xml 속성 사용하기

내 ~ / .m2 디렉토리에 Maven settings.xml 파일이 있습니다. 다음과 같이 보입니다.

<settings>
    <profiles>
        <profile>
            <id>mike</id>
            <properties>
                <db.driver>org.postgresql.Driver</db.driver>
                <db.type>postgresql</db.type>
                <db.host>localhost</db.host>
                <db.port>5432</db.port>
                <db.url>jdbc:${db.type}://${db.host}:${db.port}/dbname</db.url>
            </properties>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>mike</activeProfile>
    </activeProfiles>
    <servers>
        <server>
            <id>server_id</id>
            <username>mike</username>
            <password>{some_encrypted_password}</password>
        </server>
    </servers>
</settings>

이 속성을 두 번 사용하고 싶습니다.

내 servlet-context.xml 파일의 관련 부분은 다음과 같습니다.

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName"><value>${db.driver}</value></property>
    <property name="url"><value>${db.url}</value></property>
    <property name="username"><value>${username}</value></property>
    <property name="password"><value>${password}</value></property>
</bean>

최종 목표는 각 개발자가 자신 만의 Maven 설정 (및 통합 테스트를 위해 자체 컴퓨터에 데이터베이스)을 ... 그리고 젠킨스 서버에서 비슷한 설정을 사용하는 것입니다. 우리는 공통 사용자 이름 / 암호 / 등을 공유하고 싶지 않습니다.

해결법

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

    1.Maven War Plugin을 설정하여 웹 자원을 필터링하는 방법이 있습니다. 공식 플러그인의 문서에서 발췌 문장을 찾으십시오.

    Maven War Plugin을 설정하여 웹 자원을 필터링하는 방법이 있습니다. 공식 플러그인의 문서에서 발췌 문장을 찾으십시오.

    그리고 필자는 빌드 타임에 사실상 런타임 구성을 제공하기 위해 필터링 기반 방식을 재검토 할 것을 강력히 권장합니다. 다른 환경을 위해 패키지를 준비하기 위해서 (또는 패키지 내용을 편집하기 위해) 동일한 코드를 다시 만들어야한다는 것을 알아 두십시오. 당신은 이것 (적어도 JBoss는 하나 있습니다)을 위해 응용 프로그램 서버의 특정 물건을 사용하거나 AFAIR이 이와 같이 구성 될 수있는 Spring을 사용할 수 있습니다.

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

    2.중간에 속성 파일을 사용하는 것이 좋습니다. 내 말은 : Spring 애플리케이션은 context-propertyholder를 사용하여 속성 파일에서 속성 값을로드 할 것이고 Maven은 필터링을 사용하여 settings.xml의 값을 사용하여 $ {...} 변수를 대체 할 것이다.

    중간에 속성 파일을 사용하는 것이 좋습니다. 내 말은 : Spring 애플리케이션은 context-propertyholder를 사용하여 속성 파일에서 속성 값을로드 할 것이고 Maven은 필터링을 사용하여 settings.xml의 값을 사용하여 $ {...} 변수를 대체 할 것이다.

    당신의 속성 파일 :

    db.driver=${db.driver}
    db.url=${db.url}
    username=${username}
    password=${password}
    

    servlet-context.xml 파일

    <context:property-placeholder location="classpath:your-property-file.properties" />
    
    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName"><value>${db.driver}</value></property>
        <property name="url"><value>${db.url}</value></property>
        <property name="username"><value>${username}</value></property>
        <property name="password"><value>${password}</value></property>
    </bean>
    

    pom.xml에

    <resources>
        ...
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        ...
    </resources>
    
  3. ==============================

    3.나는 그것을 시도하지는 않았지만이 Maven 위키 페이지에 따라 settings.xml에서 설정을 사용하여 속성을 참조 할 수 있어야합니다. 접두사. 따라서 $ {settings.servers.server.username}은 settings.xml에서 사용자 이름을 이상적으로 반환해야합니다.

    나는 그것을 시도하지는 않았지만이 Maven 위키 페이지에 따라 settings.xml에서 설정을 사용하여 속성을 참조 할 수 있어야합니다. 접두사. 따라서 $ {settings.servers.server.username}은 settings.xml에서 사용자 이름을 이상적으로 반환해야합니다.

  4. from https://stackoverflow.com/questions/10730755/using-maven-settings-xml-properties-inside-spring-context by cc-by-sa and MIT license