如何处理独立 Java 应用程序中的休眠异常



Hibernate抛出的异常是未经检查的,从我在其他地方读到的内容来看,它们似乎不应该被代码捕获。但是,这意味着例如,当发生临时数据库错误时,发生该错误的线程将死亡,并且我们的应用程序变得无响应。应该怎么做?

发生的异常示例:

javax.persistence.PersistenceException
Caused by: org.hibernate.exception.GenericJDBCException: could not insert
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

当应用程序运行数小时或数天时,会发生这种情况。

我读过的大部分内容都谈到了在集成到 Spring 或类似的东西中如何使用 Hibernate。因此,每个 Web 请求都会启动一个新线程,如果该线程死亡,则只会影响该 Web 请求。但是对于独立的Java应用程序,我们应该如何处理它?

捕获 RuntimeException 并没有错。未选中它只是为了让您选择不这样做。

如果你有一个特定的策略来处理异常(比如重试,或者在应用逻辑中触发其他内容(,一定要抓住它!

休眠 异常是未选中的,因为它们不想强迫您捕获它们,如果您想在 DAO 或其他任何地方处理,这取决于应用程序的设计。

如果您的情况,您应该处理(捕获(PersistenceException并采取纠正措施通知您的用户发生了不好的事情。

正如一般说明上其他答案所强调的那样,抓住RuntimeException并采取纠正措施没有害处,通常建议扔RuntimeException而不是CheckedException

如果你有一个独立的应用程序,你仍然可以使用 Spring。归根结底,Spring 只不过是一堆 Java 类,您可以配置它们来加载和运行。在中心你有一个 ApplicationContext 对象,它只是 applicationContext.xml 文件的对象版本。

基本上,在你的"public static void main(String[] args("中,你从你的xml文件创建一个ApplicationContext。请注意,ApplicationContext 是一个接口,因此您可能会调用 FileSystemXmlApplicationContext(String configLocation( 的构造函数。

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/context/support/FileSystemXmlApplicationContext.html#FileSystemXmlApplicationContext(java.lang.String(

查看 http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/beans.html 并仔细查看第 3.2 节。

相关内容

最新更新