繁体   English   中英

Spring Data Jpa超时异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM