java - 使用 Maven 和 Spring 控制项目 : How to set Spring config file using Maven profiles?

标签 java spring maven configuration-files

我正在尝试根据某个 Maven 配置文件是否处于 Activity 状态来配置包含数据库信息的 Spring 配置文件。我已经看到了这方面的一些答案,但我无法将它们放在一起。

我有一个这样的 Maven 配置文件:

<profiles>
    <profile>
        <id>production</id>
        <activation>
            <property>
                <name>environment.type</name>
                <value>prod</value>
            </property>
        </activation>
    </profile>

    <profile>
        <id>development</id>
        <activation>
            <property>
                <name>environment.type</name>
                <value>dev</value>
            </property>
        </activation>

        <!-- Database properties for Spring -->
        <properties>
            <db.driver>oracle.jdbc.driver.OracleDriver</db.driver>
            <db.type>oracle</db.type>
            <db.host>192.168.0.0</db.host>
            <db.port>1521</db.port>
            <db.name>myDb</db.name>
            <db.url>jdbc:${db.type}:thin:@${db.host}:${db.port}:${db.name}</db.url>
        </properties>

还有一个像这样的 settings.xml 文件:

<servers>
  <server>
    <id>development</id>
    <username>jsmith</username>
    <password>secret</password>
  </server>
</servers>

....

<profiles>
  <profile>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>

    <properties>
      <environment.type>dev</environment.type>
    </properties>
  </profile>
</profiles>

在 servlet-context.xml 中:

<bean id="dataSource" 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>${db.username}</value>
    </property>

    <property name="password">
        <value>${db.password}</value>
    </property>

    <property name="maxActive">
        <value>10</value>
    </property>

    <property name="maxIdle">
        <value>1</value>
    </property>
</bean>

我的问题基本上是,如何将 Maven 属性放入 servlet-context.xml 文件中?我需要一个 .properties 文件吗?我对 Maven 中的过滤和 Spring 中的 PropertyPlaceholderConfigurer 了解一些,但我不知道如何将它们组合在一起——或者它们是否组合在一起?还是有更简单的方法?

最佳答案

我需要一个 .properties 文件吗?

一般来说,是的,你需要使用.properties文件,这是我们通常做的,尤其是在spring上下文文件中处理数据库连接配置。

.properties 文件的目的是提供在应用程序运行时配置数据库连接的能力(对于 Web 应用程序,通常需要在 .properties 文件更改后重新启动应用程序容器/服务器)。这通常在不同环境(DEV/TEST/UAT/PROD)中的应用程序部署/安装步骤中完成。

将这些数据库连接设置存储在 pom.xml 中并不是一个好习惯,因为 pom.xml 的目的是用于项目描述并且仅在应用程序构建时使用一次(例如 mvn deploy)。而且在大多数情况下,即使它被打包到最终的 jar/war 文件中,我们也不会真正关心并在构建应用程序后对其进行修改。

要在 spring 上下文中使用 .properties 文件,请在 applicationContext 中定义一个 propertyConfigurer bean,例如:

<bean id="propertyConfigurer"
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
    <list>
      <!-- Default location inside war file -->
      <value>classpath:db.properties</value>
      <!-- Environment specific location, a fixed path on server -->
      <value>file:///opt/my-web-app/conf/db.properties</value>
    </list>
  </property>
  <property name="ignoreResourceNotFound" value="true"/>
</bean>

希望这是有道理的。

关于java - 使用 Maven 和 Spring 控制项目 : How to set Spring config file using Maven profiles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874017/

相关文章:

java - 如何解决Maven对MongoDB的依赖

java - 设置上下文路径而不考虑 Tomcat 中的 WAR 版本名称

java - 通过JUNIT运行程序时如何打印值(用于调试)

java - 在一段时间后设置可见的 Android 按钮?

java - AngularJS + Spring : 415 unsupported media type

jquery - Spring文件通过ajax上传

spring - Spring-EL 表达式可以在沙箱中执行吗?

java - 如何在 WebServiceTemplate 上设置代理服务器详细信息

java - 显示 Java 文件而不是 XML 文件中的文本 (Android Studio)

java - 即使我有正确的命名约定 *IT.java,故障安全插件也不会选择测试类