Spring Data Jpa的超时异常

时间:2015-08-19 11:40:54

标签: java spring postgresql jpa

如果Spring Data Jpa存储库查询超时,我可以捕获哪个特定的异常?

让我们说我有这样的存储库:

create table #tab (genId varchar(max))

insert into #tab(genId)
values('RT00031'),('RT00013232'),('RT00034'),('RT00084')

select * from #tab

select max(cast(SUBSTRING(genId,3,len(genId)-2) as int)) from #tab

超时发生时调用者会看到哪个异常?

我不知道如何模拟这种情况,红利问题将是如何做到的?

使用过的数据库是PostrgreSQL。

3 个答案:

答案 0 :(得分:2)

您将获得的异常是QueryTimeoutException,它是DataAccessException的子类,它是通用的“使用Spring访问数据库时出错的地方”

答案 1 :(得分:2)

如果您已配置

 <jpa:repositories base-package="com.acme.repositories" />

来自Spring文档http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.create-instances

  

使用此元素查找Spring Data存储库,如中所述   创建存储库实例。除此之外,它激活了持久性   使用@Repository注释的所有bean的异常转换   JPA持久性提供程序抛出的异常将被转换   进入Spring的DataAccessException层次结构。

因此,您可以捕获DataAccessException来处理异常

答案 2 :(得分:0)

使用Spring的@Transactional超时时,您将获得“org.springframework.transaction.TransactionSystemException”异常。

实际上,您可以通过在测试期间锁定表来模拟情况,如下所示。

LOCK TABLE table_name IN ACCESS EXCLUSIVE MODE;

在完成测试并结束事务以释放表上的锁之前,请确保事务未完成。