什么是监视数据库连接的最佳/良好/最佳方式。我正在编写秋千应用程序。我想要做的是每隔一段时间检查一次与数据库的连接。我已经尝试过这样的事情。
org.hibernate.Session session = null; try { System.out.println("Check seesion!"); session = HibernateUtil.getSessionFactory().openSession(); } catch (HibernateException ex) { } finally { session.close(); }
但这是行不通的。我想到的第二个问题是此会话关闭将如何影响其他查询。
使用连接池,例如c3p0或dbcp。您可以将此类池配置为监视池中的连接- 在将连接传递给Hibernate之前,将其返回或定期接收之后。如果连接断开,则透明地将其关闭,丢弃并打开一个新的池-无需注意。
数据库连接池更适合于同时打开多个连接的多用户,数据库繁重的应用程序,但是我认为这并不过分。绑定到最大1个连接的池应该可以正常工作。
更新:每次尝试访问数据库时,Hibernate都会询问DataSource(连接池)。如果没有活动的连接可用(例如,由于数据库关闭),这将引发异常。如果您想提前知道数据库何时不可用(即使用户什么都不做),那么不幸的是,您需要偶尔执行一次后台线程检查数据库。
DataSource
但是,在某些配置中,仅打开会话可能还不够。您最好运行一些虚拟的廉价查询,例如SELECT 1(在原始JDBC中)。
SELECT 1