2012-02-15 65 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>