2012-02-15 5 views
9

これはおそらくダムの質問ですが、私の人生のためには分かりません。基本的に私は、mavenを使って自分のdataSourceのユーザ名、パスワード、ドライバクラス名を設定しています。有効なPom.xmlを見ると、次のように表示されます。springに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は私が探していたものでした。 –

答えて

2

春は.propertiesファイルでこれらの値を見つけることが期待されます。

これらの値を持つPropertyConfigurationPlaceholderを注入すると、Springがそれを検出します。以下の例3.8.2.1用

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html

ルック:Mavenのは、コンパイル時に動作し、パラメータは実行時に評価するので

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html

2

Mavenのは、アプリケーションにデータを転送することはできません。

しかし、あなたはmavenフィルタを使うことができます。 mavenがリソースを処理している間に、マーカーに値を代入する。

+0

私はこの答えに同意します。 mavenフィルタリングを使用すると、ビルド時にバネ設定ファイルの値が更新され、実行時に正しい値が得られます。 http://stackoverflow.com/questions/3886753/access-maven-project-version-in-spring-config-filesを参照してください。 – Noremac

3

私はあなたのpom.xmlからの春のアプリケーションコンテキストのXMLに、私が意味する、そのようにそれを行うことができないと思います。プロパティファイルをロードし、春applicationtコンテキストファイルのプロパティのavailablesを作るためにPropertyConfigurationPlaceholderを使用し、その後

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

は、プロパティファイル内のようなものをあなたの特性を入れてください。

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> 

6

最良の方法は、Mavenのリソースプラグインを設定することです"**/* file_with_properties.xml"は、プロパティ(つまり、$ {dataSource.username})を使用するファイルです。

以外にも、あなたは除外を定義することができます。すべての助けを <excludes>**/*other_files.xml</excludes>

関連する問題