Java 如何判断数据库是否已关闭或不可用?

Java 如何判断数据库是否已关闭或不可用?,java,spring,hibernate,jms,Java,Spring,Hibernate,Jms,我正在使用Spring DefaultMessageListenerContainer来使用队列中的消息。然后将这些消息保存到Oracle数据库中 当数据库宕机时,我抛出onMessage方法的异常,将消息留在队列中等待重新处理。下面您可以看到,在DataAccessResourceFailureException和CannotCreateTransactionException异常上,我将异常从方法中抛出,从而将其放回队列。其他异常不保存消息;它们对应于数据问题等 public void on

我正在使用Spring DefaultMessageListenerContainer来使用队列中的消息。然后将这些消息保存到Oracle数据库中

当数据库宕机时,我抛出onMessage方法的异常,将消息留在队列中等待重新处理。下面您可以看到,在DataAccessResourceFailureException和CannotCreateTransactionException异常上,我将异常从方法中抛出,从而将其放回队列。其他异常不保存消息;它们对应于数据问题等

public void onMessage(javax.jms.Message mqMessage) {
    ...get the message blah, blah, blah
    try {
        this.theService.doMessage(tmaticMessage, theHandler);
    } catch (DataAccessResourceFailureException e) {
        this.slowDown(mqMessage);
        throw e;
    } catch (CannotCreateTransactionException e) {
        this.slowDown(mqMessage);
        throw e;
    } catch (DataAccessException e) {
        ...
    } catch (TmUnusableMessageException e) {
        ...
    } catch (Exception e) {
        ...
    }
}
阅读Spring文档时,我发现DataAccessResourceFailureException应该被抛出“…当资源完全失效时:例如,如果我们不能使用JDBC连接到数据库。”问题是,我刚刚做了一个测试,让DBA关闭数据库,并得到一个新的异常:CannotCreateTransactionException。这是可以抛出的又一个异常。我想知道是否还有其他人


我正在使用Spring连接和getHibernateTemplate()进行调用。问题是。我如何知道当数据库关闭时会抛出哪些异常?

可能这种复杂性是由“关闭数据库”的各种方式造成的。例如:

  • 删除表
  • 删除整个数据库
  • 禁用数据库用户帐户
  • 正在关闭数据库服务器
所有这些都可以被视为“关闭数据库”,但每个都可能导致抛出不同的异常

如果您浏览spring javadoc中的以下部分,则可能会引发以下异常列表: