繁体   English   中英

只为一种方法更改 Hibernate 事务超时?

[英]Alter Hibernate transaction timeout for only one method?

有没有办法只为 Spring Boot 2 JPA 存储库中的一种方法更改Hibernate 默认事务超时值? 我想为我的应用程序保留默认的 30 秒(它包含使用 Hibernate SessionFactory 的 JPA 存储库和遗留存储库),但允许一个通常需要更多时间才能运行的作业(编辑:发生在独立事务中)。 我想知道是否有一种方法可以指定特殊情况,就像您可以在某些情况下从回滚中排除事务一样。

我正在寻找一种解决方案,它不需要创建与我用于其他方法不同的 HibernateTransactionManager。

Spring 有一个@Transactional注释,用于标记应该在事务上下文中运行的方法(以及作用域)。 该注解有一个timeout属性,可用于覆盖默认超时。

请注意,超时只能在事务级别设置,因此timeout属性仅在注释导致新事务启动时使用。 该文档特别指出:“专为与 Propagation.REQUIRED 或 Propagation.REQUIRES_NEW 一起使用而设计,因为它仅适用于新启动的事务。”

Propagation.REQUIRED只会在没有活动事务时启动新事务,因此如果您想确保设置超时,则需要启动一个新事务,因此最好使用Propagation.REQUIRES_NEW

因此注释将是: @Transactional(timeout = 30, propagation = Propagation.REQUIRES_NEW)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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