如果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。
答案 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;
在完成测试并结束事务以释放表上的锁之前,请确保事务未完成。