В своем веб-приложении я использую hibernate и hsqldb для операций с базами данных .. и использую Ant для управления сборкой. У меня есть local.properties, содержащие db.url, db.driver и т. Д. Они содержат производственные значения db.
В hibernate.cfg.xml я снова предоставляю эти параметры БД в качестве свойств внутри элементов SessionFactory.
В файле сборки Ant я использую local.properties в качестве файла свойств, чтобы я мог создатьцель для запуска db.
Наконец, в моей реализации dao я использую класс HibernateUtil для создания фабрики сессий. Теперь я могу получить доступ к myappdb.
Моя проблема в том, чтоМне нужно использовать другой БД для целей тестирования.У меня есть несколько классов тестирования junit и несколько тестов кактусов, которые должны работать на myapptestdb. В настоящее время я заменяю все параметры, связанные с БД, в local.properties и hibernate.cfg.xml на значения testdb.
т.е. замените myappdb на myapptestdb и т. д. Я знаю, это не правильный способ сделать это .. Кто-нибудь может предложить лучшее решение для этого?
заранее спасибо,
mark
Соответствующие части различных файлов конфигурации в моем проекте приведены ниже.
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>
build.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;
}
}