抢先并优雅地检查org.hibernate.Session是否仍然连接(通过c3p0)

我在多分类数据库环境中工作,其中分片的停机时间不是致命的。 当应用程序启动时,所有分片信息都会加载到缓存中并加载相应的Session对象,但是,在应用程序正常运行期间,预计某些分片可能会关闭,在这种情况下,应用程序会故障转移到剩余的分片之一碎片。 它几乎是一个标准的用例场景。

在某些情况下,我需要进行交叉分片扫描,我这样做的方法是遍历上述会话映射并检索数据。 当我的Hibernate会话到一个同时因为会话打开而失败的数据库时,问题出现了。 我希望有一种先发制人的方法来检查数据库是否已关闭而不尝试事务并获取org.hibernate.exception.GenericJDBCException ,这是我现在发现它的方式,但这很糟糕,因为它是运行时exception,在所有其他邪恶中。 我还尝试了Session.isOpen()Session.isConnected()但即使数据库关闭,这两种方法都返回true。

有没有办法先发制人地优雅地检查Hibernate Session的连接? 像向数据库发送ping一样的东西。 也值得知道我们使用c3p0进行连接池。 有没有办法可以配置它来告诉Hibernate连接断开并关闭/断开相关会话?

我认为那些唯一的工作是你明确称为方法session.close()