Как передать значение Maven Profiles в Spring Bean XML

Я новичок в 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>

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

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

Вы должны использовать профили с пружинной загрузкой вместо профилей Maven.

khmarbaise 09.01.2019 11:31
Не удалось выполнить цель org.apache.maven.plugins
Не удалось выполнить цель org.apache.maven.plugins
Опишу, что когда я только начинал изучать Maven, у меня не получалось компилировать и упаковывать.
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
0
1
267
1

Ответы 1

Первый:

Не писать пользователя и переходить в файл 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

Привет, Серджио, спасибо за объяснение. Я постараюсь как ваша ссылка.

Bayu Sri Hernogo 10.01.2019 04:02

Другие вопросы по теме