一尘不染

休眠检查线程中与数据库的连接(每个时间段)

hibernate

什么是监视数据库连接的最佳/良好/最佳方式。我正在编写秋千应用程序。我想要做的是每隔一段时间检查一次与数据库的连接。我已经尝试过这样的事情。

org.hibernate.Session session = null;
            try {
                System.out.println("Check seesion!");
                session = HibernateUtil.getSessionFactory().openSession();

            } catch (HibernateException ex) {
            } finally {
                session.close();
            }

但这是行不通的。我想到的第二个问题是此会话关闭将如何影响其他查询。


阅读 185

收藏
2020-06-20

共1个答案

一尘不染

使用连接池,例如c3p0dbcp。您可以将此类池配置为监视池中的连接-
在将连接传递给Hibernate之前,将其返回或定期接收之后。如果连接断开,则透明地将其关闭,丢弃并打开一个新的池-无需注意。

数据库连接池更适合于同时打开多个连接的多用户,数据库繁重的应用程序,但是我认为这并不过分。绑定到最大1个连接的池应该可以正常工作。

更新:每次尝试访问数据库时,Hibernate都会询问DataSource(连接池)。如果没有活动的连接可用(例如,由于数据库关闭),这将引发异常。如果您想提前知道数据库何时不可用(即使用户什么都不做),那么不幸的是,您需要偶尔执行一次后台线程检查数据库。

但是,在某些配置中,仅打开会话可能还不够。您最好运行一些虚拟的廉价查询,例如SELECT 1(在原始JDBC中)。

2020-06-20