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&useUnicode=true&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方案。
这篇文章上的评论的 RSS feed TrackBack URI