Я новичок в 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>
Я так тупой на этот вопрос, но прошу всех ответить и объяснить простым методом.
Большое спасибо.


Первый:
Не писать пользователя и переходить в файл 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, вам больше ничего не нужно. Но из соображений безопасности я рекомендую вам, как лучшая практика, записывать разумные значения среды в файл внешних свойств:
И, наконец, в вашем 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
Привет, Серджио, спасибо за объяснение. Я постараюсь как ваша ссылка.
Вы должны использовать профили с пружинной загрузкой вместо профилей Maven.