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