如何将 Maven Profiles 值传递给 Spring Bean XML

问题描述 投票:0回答:2

我是 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 配置文件传递到 Spring bean 属性,如下所示:

<!-- 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 spring-mvc
2个回答
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. /etc/app 上可以有多个 *.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

0
投票

1-pom 构建设置

<build>
  <resources>
    <resource>
      <filtering>true</filtering>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
</build>

如果添加支持utf-8的资源插件就更好了 将这部分添加到 pom.xml 中的构建标记

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
      <encoding>UTF-8</encoding>
    </configuration>
  </plugin>
</plugins>

最后你在 pom.xml 文件中有了这个配置

<build>
  <resources>
    <resource>
      <filtering>true</filtering>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <version>3.0.2</version>
      <configuration>
        <encoding>UTF-8</encoding>
      </configuration>
    </plugin>
  </plugins>
</build>

2-使用以下命令更改 Spring bean 定义:

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

3-使用此命令:

 mvn compile

希望有用。

© www.soinside.com 2019 - 2024. All rights reserved.