0

MyBatis を使用するサンプル マルチモジュール Maven プロジェクトを開発しています。私が持っている唯一の依存関係は、私自身のモジュールであり、mybatis 自体です。
私の永続層では、次のものを作成しましたpom.xml

<properties>

    <!-- JDBC -->
        <jdbc.url>jdbc:postgresql://localhost:5432/kpi?autoReconnect=true</jdbc.url>
        <jdbc.driverClassName>org.postgresql.Driver</jdbc.driverClassName>
        <jdbc.username>postgres</jdbc.username>
        <jdbc.password>postgres</jdbc.password>
        <jdbc.initConnections>15</jdbc.initConnections>
        <jdbc.maxActive>40</jdbc.maxActive>
        <jdbc.maxIdle>5</jdbc.maxIdle>

</properties>


次に、mybatis-config.xml内部src/main/resourcesで、次のことを行いました。

<environments default='development'>
    <environment id='development'>
        <transactionManager type='JDBC'/>
        <dataSource type='POOLED'>  
            <property name='driver' value="${jdbc.driverClassName}"/>
            <property name='url' value="${jdbc.url}"/>
            <property name='username' value="${jdbc.username}"/>
            <property name='password' value="${jdbc.password}"/>
        </dataSource>
    </environment>


結局、アプリケーションを実行しようとすると、次のエラーが発生します。

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.sql.SQLException: Error setting driver on  UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: ${jdbc.driverClassName}


しかし、上記のコードを変更して、jdbc から情報を明示的に入力すると、次のように動作します。

 <environments default='development'>
    <environment id='development'>
        <transactionManager type='JDBC'/>
        <dataSource type='POOLED'>  
            <property name='driver' value="org.postgresql.Driver"/>
            <property name='url' value="jdbc:postgresql://localhost:5432/kpi?autoReconnect=true"/>
            <property name='username' value="postgres"/>
            <property name='password' value="postgres"/>
        </dataSource>
    </environment>
</environments>


それで、私が私の中に入れた情報を使ってそれを機能させることは可能pom.xmlですか? タグを使用してみまし<properties resource='pom.xml'/>たが、成功しませんでした。

前もって感謝します。

4

2 に答える 2

3

まず、技術的には、MyBatis の実行時に POM のプロパティを読み取ることはできません。これは、POM はコンパイルで使用されるものであり、MyBatis の実行時には、既にコンパイルを通過したランタイムであるためです。したがって、POM からデータを読み取ることは合理的ではありません (ただし、MyBatis 構成がビルド プロセスの自動テストの一部である場合を除きますが、そうではないようです)。

Maven のリソース フィルタリング メカニズムを使用して同様の効果を得ることができます。このメカニズムでは、mybatis-config.xmlビルド プロセス中に Maven で定義されたプロパティにプレースホルダーが置き換えられます。

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

問題の原因となったリソース ディレクトリでのフィルタリングを停止する POM の設定がいくつかある可能性があります。アプリケーションをビルドした後、プロパティが JAR/WAR で適切に置き換えられているかどうかを確認してください。

ただし、個人的にはそうすることをお勧めしません。このような種類のプロパティは環境固有であり、結果アーティファクトに「ハードコード」するべきではありません。別の環境に対処するためだけにアプリを再度ビルドする必要がないように、アプリケーションの実行時に構成ファイルまたはコマンド ライン引数を提供できるように、設計を更新することを検討する必要があります。

于 2013-09-25T03:01:41.683 に答える