Как проверить, работает ли база данных JPA / hibernate с кэшированием второго уровня - PullRequest
0 голосов
/ 26 января 2010

У меня есть приложение JSP / Spring, использующее Hibernate / JPA, подключенное к базе данных. У меня есть внешняя программа, которая проверяет, работает ли веб-сервер каждые 5 минут.

Программа вызывает определенный URL, чтобы проверить, работает ли веб-сервер. Сервер возвращает «УСПЕХ». Очевидно, что если сервер сейчас, ничего не возвращается. Превышено время ожидания запроса и оповещение системного администратора о том, что что-то не так ...

Я хотел бы добавить еще один слой к этому процессу: я хотел бы, чтобы сервер возвращал «ОШИБКА», если сервер базы данных не работает. Есть ли способ использовать Hibernate для проверки работоспособности сервера базы данных?

То, что я пытался сделать, это взять объект и попытаться сохранить его. Это сработает, но я думаю, что это слишком много для того, что я хочу. Я также мог прочитать (загрузить) объект из базы данных. Но поскольку мы используем кэширование второго уровня для всех наших объектов, объект будет загружен из кэша, а не из базы данных.

Я ищу что-то вроде:

HibernateUtils.checkDatabase()

Существует ли такая функция в Hibernate?

1 Ответ

0 голосов
/ 26 января 2010

Вы можете использовать собственный запрос, например,

Query query = sess.createNativeQuery("select count(*) from mytable").setCacheable(false);
BigDecimal val = (BigDecimal) query.getSingleResult();

Это должно заставить hibernate использовать соединение из пула.Если БД не работает, я не знаю точно, что будет с ошибкой, возвращенной hibernate, учитывая, что он не может получить соединение из пула.Если БД работает, вы получите результат вашего запроса.

...