Как вообще протестировать соединение с базой данных с помощью Hibernate - PullRequest
2 голосов
/ 13 января 2012

У меня есть метод сервиса для API, который можно вызвать для проверки работоспособности моего соединения с базой данных.

Метод извлекает строку запроса из файла свойств (зависит от поставщика БД, используя Sybase иHSQL на данный момент, больше в будущем) и его выполнение.Затем этот метод позволяет вызывающему абоненту узнать, успешно он или нет.

В дополнение к этому я использовал Query.setHint("javax.persistence.query.timeout"), чтобы установить тайм-аут запроса:

javax.persistence.EntityManager entityManager;
...
Query heartbeatQuery = entityManager.createNativeQuery(heartbeatQueryString);
heartbeatQuery.setHint("javax.persistence.query.timeout", heartbeatTimeout);
heartbeatQuery.getResultList();

Моя проблемасвойство timeout работает с моей базой данных Sybase, но не с моей базой данных HSQL.Похоже, это зависит от поставщика, поэтому я не знаю точно, когда он будет работать.

Есть ли лучший способ для общего тестирования соединения с БД и включения какого-либо параметра времени ожидания?

1 Ответ

1 голос
/ 14 января 2012

Ну, к сожалению, нет.Подсказки в запросах JPA не являются обязательными, т. Е. Их выполнение зависит от разработчика (EclipseLink, Hibernate и т. Д.).Более того, даже если разработчик выбрал распознавание определенной подсказки запроса, если функциональность этой подсказки не поддерживается базой данных, он не будет работать (здесь некоторые разработчики хороши и сообщают вам, что определенная подсказка не будет работать снова).ток бд пока другие молчат неудачно).В случае HSQLDB нет способа установить время ожидания запроса.Вы можете установить тайм-аут только для входа в систему (т. Е. Сколько времени он должен ждать успешного входа в систему, прежде чем он потерпит неудачу), но не для продолжительности запросов.С одной стороны, даже если бы вы решили эту проблему, вы бы все равно наткнулись на другие проблемы с HSQLDB, поскольку он не поддерживает множество других приятных функций, которые есть у большинства баз данных.Вы должны использовать только HSQLDB для базовой интеграции / модульного тестирования.Для более сложного тестирования вы можете использовать встроенную библиотеку MySQL Java.Вы можете найти его здесь:

http://dev.mysql.com/doc/refman/5.0/en/connector-mxj.html

Это просто полностью упакованный полностью рабочий сервер Mysql, который имеет Java API для запуска и остановки, работает на большинстве основных ОС (win, lin, OS X и т. д.).Таким образом, вы можете заставить свои интеграционные тесты запускать настоящий сервер Mysql и пробовать свой код там, где такие вещи, как подсказка тайм-аута запроса, будут работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...