【发布时间】:2021-12-06 05:24:29
【问题描述】:
有没有办法只为 Spring Boot 2 JPA 存储库中的一种方法更改 Hibernate default transaction timeout 值?我想为我的应用程序(其中包含 JPA 存储库和使用 Hibernate SessionFactory 的旧存储库)保留默认的 30 秒,但允许通常需要相当多的工作(EDIT: 在独立事务中进行)更多要运行。我想知道除了Transactions from rollbacking in certain situations之外,是否有办法指定特殊情况,就像你一样。
我正在寻找一种不需要创建与其他方法不同的 HibernateTransactionManager 的解决方案。
【问题讨论】:
-
您只能在每个事务中执行此操作,因此如果该方法导致事务启动,您可以更改它。在该方法上添加注释应该是可行的 - 我会查看
@Transactional(timeout = 30),如果你想始终在自己的事务中运行该方法,我会添加propagation = Propagation.REQUIRES_NEW。 -
@Thomas 这会覆盖默认超时吗?
-
是的,这专门用于覆盖默认超时。 JavaDoc 在这里应该有所帮助,我会再次指出这部分(我强调):“专为与 Propagation.REQUIRED 或 Propagation.REQUIRES_NEW 一起使用而设计,因为 它仅适用于新开始的事务。”
-
@Thomas 这是我问题的正确答案。您能否添加一个答案,以便我可以标记为已接受?
标签: java spring hibernate jpa transactions