[英]Timeout Exception with Spring Data Jpa
如果Spring Data Jpa存储库查询超时,我可以捕获哪个特定的异常?
可以说我有这样的存储库:
public interface VoucherRepository extends CrudRepository<VoucherEntity, String> {
@Transactional(readOnly = true, timeout = 30)
VoucherEntity findByCode(String code);
List<VoucherEntity> findAllByCodeIn(List<String> codes);
}
发生超时时,调用方会看到哪个异常?
我不知道如何模拟这种情况,奖金问题将是如何做到的?
使用的数据库是PostrgreSQL。
您将获得的异常是QueryTimeoutException
,它是DataAccessException
的子类,它是通用的“使用Spring访问数据库时出了点问题” 。
如果已配置
<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来处理您的异常
使用Spring的@Transactional超时时,您将获得“ org.springframework.transaction.TransactionSystemException”异常。
实际上,您可以通过在测试期间锁定表来模拟这种情况,如下所示。
LOCK TABLE table_name IN ACCESS EXCLUSIVE MODE;
在完成测试并结束事务以释放表上的锁之前,请确保事务未完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.