【问题标题】:How to check if an JPA/hibernate database is up with second-level caching如何检查 JPA/hibernate 数据库是否具有二级缓存
【发布时间】:2011-01-09 14:35:58
【问题描述】:

我有一个使用 Hibernate/JPA 连接到数据库的 JSP/Spring 应用程序。我有一个外部程序检查网络服务器是否每 5 分钟启动一次。

程序调用特定的 URL 来检查 Web 服务器是否仍在运行。服务器返回“SUCCESS”。显然,如果服务器现在是,则不会返回任何内容。请求超时并引发警报以通知系统管理员出现问题...

我想在这个过程中添加另一层:如果数据库服务器关闭,我希望服务器返回“ERROR”。有没有办法使用 Hibernate 来检查数据库服务器是否正常运行?

我最难做的就是拿起一个物体并尝试保存它。这会起作用,但我认为这对于我想要的来说可能太多了。我还可以从数据库中读取(加载)一个对象。但是由于我们对所有对象都使用二级缓存,所以对象将从缓存中加载,而不是从数据库中加载。

我正在寻找的是这样的:

HibernateUtils.checkDatabase()

Hibernate中是否存在这样的功能?

【问题讨论】:

    标签: database hibernate spring jpa c3p0


    【解决方案1】:

    您可以使用本机查询,例如

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

    这应该强制休眠使用来自池的连接。如果数据库关闭,我不知道休眠返回的错误是什么,因为它无法从池中获取连接。如果数据库已启动,您将获得查询结果。

    【讨论】:

    • 谢谢。我做了一些测试,抛出了一个 SQL 异常。
    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 2014-11-28
    • 2011-12-18
    • 2015-05-14
    • 2017-02-20
    • 1970-01-01
    • 2023-03-08
    • 2013-11-23
    相关资源
    最近更新 更多