步骤级别的事务超时与 server.xml

Transaction timeout on step level vs server.xml

在 JSR-352 批处理中,我将块处理的步级事务超时定义为 900 秒。同时我在 server.xml 中提到的事务超时为 1800s。此块处理步骤使用 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

的超时限制是否合适

配置事务超时

是,步骤 属性 javax.transaction.global.timeout" 为分区块中执行 "chunks" 的分区级线程设置事务超时就像您在工作中所做的那样 XML (JSL) 片段:

<step id="ReportBatch" >
    <properties >
        <property name="javax.transaction.global.timeout" value="900"/>
    </properties>
    <chunk>...</chunk>
    <partition>...</partition>
</step>

服务器配置可以通过以下方式为这些 "application" 事务超时设置上限:

<transaction propogatedOrBMTTranLifetimeTimeout="1800s"/>

因此对于上面的示例,块事务的有效传输超时将为 900 秒。

这很详细,还有 问答中的一些其他选项。

事务超时会发生什么

当事务超时时,事务立即被标记为回滚,messages.log 中会出现一条消息以及相关线程的详细信息,包括堆栈跟踪。

但是,您的应用程序可能不会立即注意到。如果它 "hung" 通过网络进行调用或进行 CPU 密集计算,它将继续,并且可能只会在它接触事务性资源或检查状态时看到抛出的异常交易等