【发布时间】:2019-01-22 16:17:13
【问题描述】:
在 JSR-352 批处理上,我将块处理的步骤级别的事务超时定义为 900 秒。同时,我在 server.xml 中提到的事务超时为 1800 秒。此块处理步骤使用 PartitionMapper 步骤进行分区。 我的问题是当步骤被执行时,很少有线程使用 900 秒的步骤级事务超时超时。 但是基于 server.xml 事务超时(1800 秒),很少有线程会挂起一段时间并超时。
<step id="ReportBatch" >
<properties >
<property name="javax.transaction.global.timeout" value="900"/>
</properties></step>
server.xml
<transaction clientInactivityTimeout="1800" propogatedOrBMTTranLifetimeTimeout="1800" totalTranLifetimeTimeout="1800" transactionLogDirectory="${server.config.dir}/tranlog/"/>
我希望线程应该失败,并在步骤级别中提到 900 秒超时。 哪个事务超时优先? 是否可以从 server.xml 中删除事务超时,或者减少 server.xml 的超时限制
【问题讨论】:
-
我试图在this post 中涵盖该主题。请看看它是否回答了您的问题。
-
基于上述帖子和来自 ibm 链接,仅当应用程序组件未设置自己的事务超时时才使用此超时。但在我的情况下,我可以看到不同的行为,正如提到的少数线程使用应用程序指定的超时,这是步骤级别。少数线程使用服务器指定的超时。这就是我的困惑
-
我也有 maxIdletime。
这会有什么影响吗? -
好的,你说得对,“javax.transaction.global.timeout”步骤属性超时提供了应用程序超时,它应该约束块事务,即使对于分区线程也是如此。我希望你的分区线程在 900 秒后超时,除非你自己做一些事情,比如挂起和从分区线程启动一些其他事务。如果您可以发布一个在 1800 秒后超时的线程的堆栈跟踪,我会看看。
-
此外,当阅读器无法读取结果集(由于查询的性能)时,我遇到了错误。它因以下错误而失败。 CWWKY0024W: 当前块已回滚到作业实例 227,001 和作业执行 227,002 中步骤 genReport 的前一个检查点。步骤指标 = [(READ_SKIP_COUNT,0), (PROCESS_SKIP_COUNT,0), (WRITE_SKIP_COUNT,0), (FILTER_COUNT,0), (COMMIT_COUNT,0), (READ_COUNT,0), (WRITE_COUNT,0), (ROLLBACK_COUNT,0 )] 如何处理这个错误,是否需要在语句对象上设置查询超时。
标签: java batch-processing websphere-liberty jsr352