将maven属性传递到春天弹簧配置.xml

2022-09-03 14:19:30

我知道这可能是一个愚蠢的问题,但我无法弄清楚我的生活。基本上,我正在使用maven来设置我的dataSource用户名,密码和驱动程序类名称。当我查看有效的Pom时.xml它看起来都很好,如下所示

<dataSource.driverClassName>oracle.jdbc.driver.OracleDriver</dataSource.driverClassName>
<dataSource.username>someUsername</dataSource.username>
<dataSource.password>somePassword</dataSource.password>

我试图在声明弹簧数据源时使用此信息。代码如下所示。

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

然后,我将数据源传递到 jdbcTemplate 中,但是当我使用该模板在我的代码中运行 sql 语句时,我收到一个错误,指出找不到名为 ${dataSource.driverClassName} 的驱动程序。这显然是因为传递的是字符串常量而不是变量。我错过了什么?

谢谢


答案 1

概述

在不添加 Java 类的情况下配置 Maven Resources 插件的一种简单方法是定义资源过滤器。出于示例的目的,我们将使用 中定义的属性进行配置。spring-config.xmlpom.xml

啪.xml

该文件定义属性,如下所示:pom.xml

<project>
  <properties>
    <environment.deploy>local</environment.deploy>
  </properties>
  ...

然后,在本节中,定义将替换变量的资源(文件)的位置。在以下示例中,将仅更新该文件:buildspring-config.xml

  <build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>spring-config.xml</include>
            </includes>
        </resource>
    </resources>
  </build>
</project>

的语法功能强大,可用于替换许多文件中的值,例如:pom.xml

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
    <includes>
      <include>**/*included_filename.xml</include>
    </includes>
  </resource>
</resources>

也可以排除:

<excludes>**/*excluded_filename.xml</excludes>

如果只有一个文件需要应用变量,请设置不同的变量,例如:resource

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>spring-config.xml</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <includes>
            <include>**/*</include>
        </includes>
    </resource>
</resources>

这将确保所有文件都已捆绑,但仅被更改。spring-config.xml

弹簧配置.xml

位于 相对于项目的根目录的 ,可以使用 Maven 加载的属性。例如:src/main/resources

<beans ...>
  <bean ...>
    <property name="deploymentEnvironment">
        <list>
            <value>${environment.deploy}</value>
        </list>
    </property>
</bean>

在构建过程中,Maven 会在目标文件中替换上述内容:valuespring-config.xml

<beans ...>
  <bean ...>
    <property name="deploymentEnvironment">
        <list>
            <value>local</value>
        </list>
    </property>
</bean>

外部属性

对于真正喜欢冒险的人来说,Maven属性也可以从外部文件加载。


答案 2

我认为你不能以这种方式做到这一点,我的意思是,从pom.xml到弹簧应用程序上下文xml。

将属性放在属性文件中,如下所示:

dataSource.username=${dataSource.username}
dataSource.driverClassName=${dataSource.driverClassName}
dataSource.username=${dataSource.username}
dataSource.password=${dataSource.password}

然后,用于加载属性文件并使属性在 spring 应用程序上下文文件上可用。PropertyConfigurationPlaceholder


推荐