2012-02-15 83 views
9

我知道这可能是一个愚蠢的问题,但我无法弄清楚我的生活。基本上我使用maven来设置我的dataSource用户名,密码和驱动类名称。当我在有效的Pom.xml中看起来好像一切如下传递maven属性到弹簧

<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

感谢所有帮助。看起来像PropertyConfigurationPlaceholder是我正在寻找。 – 2012-02-15 22:02:30

回答

2

Maven可以不传输任何数据到应用程序,因为行家工作在编译时和运行时所述参数的评估。

但是你可以使用maven过滤器。在maven正在处理资源时用值代替一些标记。

+0

我同意这个答案。使用Maven过滤在构建时更新spring配置文件中的值,因此在运行时具有正确的值。请参阅http://stackoverflow.com/questions/3886753/access-maven-project-version-in-spring-config-files – Noremac 2013-07-09 20:11:13

3

我认为你不能这样做,我的意思是,从pom.xml到spring应用程序上下文xml。

把你的属性在属性文件中,是这样的:

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

然后,使用PropertyConfigurationPlaceholder加载属性文件,并就春季applicationt背景文件属性可获取的。

6

,最好的办法是配置的Maven Resources插件:

http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

例如,你应该在你的pom.xml定义(编译标签内):

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

在哪里“**/* file_with_properties.xml”是您使用属性的文件(即$ {dataSource.username})。

此外,你可以定义排除: <excludes>**/*other_files.xml</excludes>