我知道这可能是一个愚蠢的问题,但我无法弄清楚我的生活。基本上我使用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}的驱动程序。这显然是因为传递了字符串常量而不是变量。我错过了什么?
谢谢
答案 0 :(得分:7)
在不添加Java类的情况下配置Maven Resources插件的简单方法是定义resource filter。出于示例的目的,我们将使用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
。
位于src/main/resources
,相对于项目的根目录,可以使用Maven加载的属性。例如:
<beans ...>
<bean ...>
<property name="deploymentEnvironment">
<list>
<value>${environment.deploy}</value>
</list>
</property>
</bean>
在构建过程中,Maven会替换目标value
文件中的spring-config.xml
:
<beans ...>
<bean ...>
<property name="deploymentEnvironment">
<list>
<value>local</value>
</list>
</property>
</bean>
对于真正具有冒险精神的人来说,Maven属性也可以从external files加载。
答案 1 :(得分:3)
我认为你不能这样做,我的意思是,从pom.xml到spring应用程序上下文xml。
将您的属性放在属性文件中,例如:
dataSource.username=${dataSource.username}
dataSource.driverClassName=${dataSource.driverClassName}
dataSource.username=${dataSource.username}
dataSource.password=${dataSource.password}
然后,使用PropertyConfigurationPlaceholder
加载属性文件,并在spring applicationt上下文文件中使属性可用。
答案 2 :(得分:2)
Spring希望在.properties文件中找到这些值。
使用这些值注入PropertyConfigurationPlaceholder,Spring会找到它们。
查看下面的示例3.8.2.1:
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html
答案 3 :(得分:2)
Maven无法将任何数据传输到应用程序,因为maven在编译时工作,而参数a在运行时进行评估。
但你可以使用maven过滤器。在maven处理资源时用一些值标记一些标记。