Как передать значение Maven Profiles в Spring Bean XML - PullRequest
0 голосов
/ 09 января 2019

Я новичок в Spring & Maven, думаю, мой вопрос прост. Но я не могу понять и настроить его. У меня есть Maven POM, как показано ниже:

<profiles>
    <profile>
        <id>qa</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <db.driverClassName>oracle.jdbc.driver.OracleDriver</db.driverClassName>
            <db.url>jdbc:oracle:thin:@10.148.36.89:1521:mmki</db.url>
            <db.username>APW</db.username>
            <db.password>apw</db.password>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <db.driverClassName>oracle.jdbc.driver.OracleDriver</db.driverClassName>
            <db.url>jdbc:oracle:thin:@10.148.36.88:1521:mmki</db.url>
            <db.username>APW</db.username>
            <db.password>apw</db.password>
        </properties>
    </profile>
</profiles>

Мой вопрос заключается в том, как передать значение из профиля Maven в свойство bean-компонента Spring, как показано ниже:

<!-- QA ENVIRONMENT -->
<!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@10.148.36.89:1521:mmki" />
    <property name="username" value="APW" />
    <property name="password" value="apw" />
</bean> -->

<!-- PRD ENVIRONMENT -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@10.148.36.88:1521:mmki" />
    <property name="username" value="APW" />
    <property name="password" value="apw" />
</bean>

Я так туп на этот вопрос, но, пожалуйста, всем ответьте и объясните простым методом.

Большое спасибо.

1 Ответ

0 голосов
/ 09 января 2019

Первый:

Не писать пользователя и передавать в файл pom.xml

Второе:

  1. Вы можете иметь один applicationContext для каждой среды, например applicationContext-prod.xml и applicationContext-qa.xml
  2. В вашем pom.xml вы можете иметь одно свойство для каждого профиля, например:

pom.xml

<profile>
    <id>qa</id>
    <properties>
       <appContext>classpath:applicationContext-qa.xml</appContext>
       ...
    </properties>
</profile>
<profile>
    <id>prod</id>
    <properties>
        <appContext>classpath:applicationContext-prod.xml</appContext>
        ...
    </properties>
</profile>

В web.xml вы можете написать свой контекстный параметр, например:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>${appContext}</param-value>
</context-param>

Если вы пишете свои пароли в файлах applicationContext, вам больше ничего не нужно. Но из соображений безопасности я рекомендую вам рекомендация записать значения разумной среды в файле внешних свойств:

  1. Вы можете иметь несколько * .properties в / etc / app (production.properties и qa.properties)

И, наконец, в вашем applicationContext-prod.xml вы можете настроить свой propertyConfigurer как:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="location">
       <value>file:/etc/app/production.properties</value>
   </property>
</bean>

....

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        ....
        <property name="password">
            <value>${db.password}</value>

И в вашем applicationContext-qa.xml вы можете иметь свой propertyConfigurer, например:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="location">
       <value>file:/etc/app/qa.properties</value>
   </property>
</bean>
...

Очевидно, в ваших /etc/app/production.properties вы должны написать:

db.password=prodpass

Наконец, в ваших /etc/app/qa.properties вы должны написать:

db.password=qapass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...