我正在使用 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 Connections 和 getHibernateTemplate() 拨打电话。这是问题。我如何知道数据库出现故障时会引发哪些异常?