maven项目支持hibernate多数据库配置参数的方案

maven项目支持多数据库驱动的方案可以实现驱动的切换,但是比如url等jdbc参数,还需要自己手写。maven可以进一步自动化这个过程。同时不影响团队共用的项目文档。因为数据库url等参数只和开发者本地环境相关,团队中的多个开发者不能共享这些配置。所以这些配置内容应该放置在maven的用户settings.xml文件中。

比如,在settings.xml中设置的本地mysql配置:

<profiles>
    <profile>
        <id>mysql</id>
        <properties>
            <jdbc.url><![CDATA[jdbc:mysql://localhost/mydb?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=utf-8]]></jdbc.url>
            <jdbc.username>root</jdbc.username>
            <jdbc.password></jdbc.password>
        </properties>
    </profile>

在项目中hibernate的全局配置文件hibernate.cfg.xml中使用属性占位符:

<hibernate-configuration>
    <session-factory>
        <property name="dialect">${hibernate.dialect}</property>
        <property name="connection.url">${jdbc.url}</property>
        <property name="connection.username">${jdbc.username}</property>
        <property name="connection.password">${jdbc.password}</property>
        <property name="connection.driver_class">${jdbc.driverClassName}</property>

另外,maven提供了过滤器(Filter),可在编译时将maven属性替代占位符。pom.xml中过滤器的配置(这里要求所有配置文件都应该放置在src/resources目录下):

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

在我本人的环境中,一般使用derby或者h2database这样的嵌入数据库做单元测试,所以将之设置为默认属性:

<properties>
    <hibernate.dialect>org.hibernate.dialect.DerbyDialect</hibernate.dialect>
    <jdbc.grougId>org.apache.derby</jdbc.grougId>
    <jdbc.artifactId>derby</jdbc.artifactId>
    <jdbc.version>10.3.1.4</jdbc.version>
    <jdbc.driverClassName>org.apache.derby.jdbc.EmbeddedDriver</jdbc.driverClassName>
    <jdbc.url><![CDATA[jdbc:derby:target/database/helloworld;create=true]]></jdbc.url>
    <jdbc.username>test</jdbc.username>
    <jdbc.password>test</jdbc.password>

所以,如果这样执行:

mvn test

将执行derby嵌入式数据库。

切换到mysql下的测试命令:

mvn test -P mysql

这样就创建了一个不影响项目做版本控制的多数据库配置方式的maven方案。

PDF格式打印機    发送文章为PDF   

这篇文章上的评论的 RSS feed TrackBack URI

Leave a Reply