首页 > 解决方案 > @Transactional 超时在 Springboot 应用程序中对于 1 以外的值(超时 = 1)不起作用

问题描述

我正在使用 Spring Boot 2.0.2.RELEASE 中的 spring-boot-starter-data-jpa,使用 spring-data-jpa。数据库是甲骨文。JDK 1.8。

我在@Transactional调用长时间运行的查询的方法之上使用。当事务超时设置为 1 时,事务在 1 秒内超时。当@Transactionnis to timeout > 1 时,没有超时异常。查询运行我们得到响应。这是我的代码的快照:

@Transactional(propagation = Propagation.REQUIRES_NEW, timeout = 5)
public List<Pojo> doStuff() {
    result = myRepository.findDetails(); -- This call long running native query
  ...
}

奇怪的是,当应用程序在调试模式下运行并且断点保留在对存储库方法的调用时,这会起作用。我试过以下

  1. javax.persistence.query.timeout有提示也没有超时
  2. server.connection-timeout=3s- 不工作
  3. spring.jpa.properties.javax.persistence.query.timeout=10- 不工作
  4. oracle.jdbc.ReadTimeout- 有效,但在指定时间不超时。

如果提到 100,那么它有时会在 1 分钟内抛出异常,有时会更少/更多。我们在 5 分钟后收到了 DB 的回复。我们想在此之前超时并向客户端发送超时响应。

标签: spring-boothibernatespring-data-jpaconnection-timeoutquery-timeout

解决方案


推荐阅读