暂停交易是不是超时?

Posted

技术标签:

【中文标题】暂停交易是不是超时?【英文标题】:Do suspended transactions timeout?暂停交易是否超时? 【发布时间】:2018-08-17 19:06:00 【问题描述】:

我有一个在 JBOSS EAP 7 上运行的 JEE 应用程序。有一个长时间运行的异步方法可以将数据导入另一个系统。蜂鸣触发后 5 分钟后出现事务问题,这是 JBOSS 默认事务超时。到目前为止,一切都很好。我改变了行为(伪代码):

Before:
@Transactional(Required) //which is default
//The whole process takes usually longer than 5 min
void doImport
 for(n-number of datsets)
   importOneDataSet();
 


After:
@Transactional
void doImport
 for(n-number of datsets)
   importOneDataSet();
 

...
@Transactional(Requires_New) 
//a new transaction is created and the "outer" is suspended
//to import one dataset is below 5min
void importOneDataSet()
...

我假设外部事务超时在暂停/暂停时停止,但 5 分钟后我仍然遇到事务超时错误。

看来暂停交易并不会影响其交易超时?该应用服务器是我们在 JEE 标准中定义的吗? 第三个问题是:您将如何解决这个问题?不开外部交易?增加该事务的超时时间(仅)?

令人费解的是,我读过的大多数交易文章甚至都没有提到这个事实。关于该主题的唯一提示是one blog post。

【问题讨论】:

【参考方案1】:

AFAIK 你无法配置外部事务超时会发生什么。嵌套事务永远不会设置超时保持外部事务。如果您不想影响外部事务超时,则应该使内部事务异步。这样该方法将立即返回并且不会影响外部 tnx 超时。因此,在您的示例中,我将尝试使 importOneDataSet 异步。但是您应该知道,如果将其设为异步,则无法保持完整导入的一致性(即使您将 tnx 类型设置为所需的事务管理器,外部事务也无法回滚内部异步事务的工作,也无法在多个线程上保持相同的事务打开)。因此,如果您的完整导入必须保持一致,或者您必须保持数据集导入的顺序,最简单的解决方案将是增加导入的 tnx 时间。如果您的完全导入的超时时间太长(意味着在发生错误的情况下您会丢失太多工作),您应该划分您的大块并且只导入较小的工作块,您可以独立地重复单个工作块其他块万一出错。

【讨论】:

以上是关于暂停交易是不是超时?的主要内容,如果未能解决你的问题,请参考以下文章

暂停 segue 直到 IAP 交易完成

您好,你之前提的关于QThread暂停和继续运行的问题,请问最后是如何解决的?

SEC暂停区块链公司UBI Blockchain证券交易

SEC暂停UBI Blockchain公司的股票交易

调用第三方超时处理

土耳其暂停所有金融交易-股票市场熔断,里拉2021年下跌接近70%