JPA(和/或Hibernate) - 如何为连接和/或查询设置超时阈值?

时间:2010-10-05 15:51:23

标签: java hibernate jpa timeout c3p0

我正在试图弄清楚如何配置我的项目,以便JPA将超时并在配置的时间后抛出异常。有两种情况我希望这种情况发生:

  • 当JPA无法连接到数据库时
  • 当JPA查询花费超过超时阈值时返回结果集

我不确定是否可以单独配置这两种方案(每种方案的超时阈值不同),或者两者都使用一个阈值。

我的项目目前设置如下:

  • 编码为JPA 2.0规范
  • 使用Hibernate 3.5.6作为JPA实现
  • 将c3p0连接池与Hibernate一起使用
  • 使用persistence.xml配置文件(仅在必要时使用特定于Hibernate的属性值)
  • 使用任何特定于Hibernate的配置文件

3 个答案:

答案 0 :(得分:7)

JPA2持久性属性“javax.persistence.query.timeout”允许您设置查询的超时(假设底层JDBC驱动程序支持它)。

答案 1 :(得分:1)

您应该同时设置Java客户端以及数据库服务器默认超时: 如果您使用的是Spring,请使用@Transactional(timeout = 10),它最终设置preparedStatement.setQueryTimeout()提示以在10秒内关闭事务。 此外,使您的服务器超时略高于客户端超时,以便#34; Java客户端用户"例如,在15秒内超时: https://mariadb.com/kb/en/mariadb/query-limits-and-timeouts/

答案 2 :(得分:0)

This page on the Hibernate wiki详细说明了如何配置c3p0连接池,包括超时设置。

请注意,这些类型的细节与JPA或Hibernate没有多大关系,但是您在DataSource /数据库连接(本例中为c3p0)本身设置的设置。