我知道这可能是一个愚蠢的问题,但我终其一生都无法弄清楚。基本上我使用 maven 来设置我的 dataSource 用户名、密码和驱动程序类名。当我查看有效的 Pom.xml 时,一切看起来都很好,如下所示
<dataSource.driverClassName>oracle.jdbc.driver.OracleDriver</dataSource.driverClassName>
<dataSource.username>someUsername</dataSource.username>
<dataSource.password>somePassword</dataSource.password>
我在声明 spring 数据源时尝试使用此信息。代码如下所示。
<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} 的驱动程序。这显然是因为传递的是字符串常量而不是变量。我错过了什么?
谢谢
最佳答案
概述
在不添加 Java 类的情况下配置 Maven 资源插件的简单方法是定义 resource filter .出于示例的目的,我们将使用 pom.xml
中定义的属性配置 spring-config.xml
。
pom.xml
pom.xml
文件定义一个属性如下:
<project>
<properties>
<environment.deploy>local</environment.deploy>
</properties>
...
然后,在 build
部分中,定义将替换变量的资源(文件)的位置。在下面的例子中,只有文件 spring-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
被更改。
spring-config.xml
位于src/main/resources
,相对于项目的根目录,可以使用Maven加载的属性。例如:
<beans ...>
<bean ...>
<property name="deploymentEnvironment">
<list>
<value>${environment.deploy}</value>
</list>
</property>
</bean>
在构建过程中,Maven 替换目标的 spring-config.xml
文件中的上述 value
:
<beans ...>
<bean ...>
<property name="deploymentEnvironment">
<list>
<value>local</value>
</list>
</property>
</bean>
外部属性
对于真正喜欢冒险的人,Maven 属性也可以从 external files 加载。 .
关于java - 将 Maven 属性传递给 Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9301920/