【发布时间】:2011-09-27 14:21:15
【问题描述】:
在我的网络应用程序中,我使用 hibernate 和 hsqldb 进行数据库操作..并使用 Ant 进行构建管理。我有一个包含 db.url、db.driver 等的 local.properties。它们包含生产数据库值。
在 hibernate.cfg.xml 中,我再次将这些 db 参数作为属性提供在 SessionFactory 元素中。
在 Ant buildfile 中,我使用 local.properties 作为属性文件,这样我就可以创建一个启动 db 的目标。
最后,在我的 dao 实现中,我使用 HibernateUtil 类来创建会话工厂 有了这些,我就可以访问 myappdb 了。
我的问题是,我需要使用不同的数据库进行测试。 我有一些junit测试类和一些仙人掌测试需要在myapptestdb上工作。目前我正在做的是用testdb值替换local.properties和hibernate.cfg.xml中的所有db相关参数。
即,将 myappdb 替换为 myapptestdb 等。 我知道,这不是正确的方法。有人可以为此提出更好的解决方案吗?
提前致谢,
标记
我的项目中各种配置文件的相关部分如下。
local.properties
db.driver=org.hsqldb.jdbcDriver
db.server.class=org.hsqldb.server.Server
db.url=jdbc:hsqldb:hsql://localhost:9005/myappdb
db.username=SA
db.password=SA
hport=9005
dir.data=data
halias=myappdb
hjar=lib/hsqldb.jar
hfile=--database.0 data/myappdb
...
hibernate.cfg.xml
<session-factory>
<property name="connection.driver_class">
org.hsqldb.jdbcDriver
</property>
<property name="connection.url">
jdbc:hsqldb:hsql://localhost:9005/myappdb;create=true
</property>
<property name="connection.username">SA</property>
<property name="connection.password">SA</property>
...
</session-factory>
构建.xml
<property file="local.properties" />
...
<target name="startdb" description="start hsqldb in server mode">
<java fork="true" classname="${db.server.class}" >
<classpath>
<path location="${dir.lib}/hsqldb.jar"/>
</classpath>
<arg value="-database.0"/>
<arg value="${dir.data}/${halias}"/>
<arg value="-dbname.0"/>
<arg value="${halias}"/>
<arg value="-port"/>
<arg value="${hport}"/>
</java>
</target>
MyDaoImpl.java
class MyDaoImpl implements MyDao {
...
@Override
public Object findById(Long id) {
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session = factory.openSession();
Object object = null;
try {
object = (Object) session.get(persistentClass, id);
return object;
} finally {
session.close();
}
}
...
}
HibernateUtil.java
class HibernateUtil {
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
if (sessionFactory == null){
try{
Configuration configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
}catch(HibernateException e){
e.printStackTrace();
throw e;
}
}
return sessionFactory;
}
}
【问题讨论】:
标签: hibernate testing configuration production