在JSR-352批处理中,我将分步处理的事务超时定义为900s。同时,我在server.xml中提到的事务超时为1800s。使用PartitionMapper步骤对该块处理步骤进行分区。 我的问题是,当执行步骤时,很少有线程使用900s的步骤级事务超时而超时。 但是很少有线程会根据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/"/>
我期望线程在步骤级别中提到的900s超时后将失败。 优先选择哪个事务超时? 这样可以从server.xml中删除事务超时,或者减少server.xml上的超时限制
答案 0 :(得分:0)
是的,步骤属性 javax.transaction.global.timeout” 为分区级线程中执行“块”的分区级线程设置事务超时,就像在作业XML中一样(JSL)代码段:
<step id="ReportBatch" >
<properties >
<property name="javax.transaction.global.timeout" value="900"/>
</properties>
<chunk>...</chunk>
<partition>...</partition>
</step>
服务器配置可以通过以下方式为这些“应用程序”事务超时设置上限:
<transaction propogatedOrBMTTranLifetimeTimeout="1800s"/>
因此,在上面的示例中,您的大宗交易的有效tran超时为900s。
这是详细说明,以及this问答中的其他一些选项。
事务超时后,该事务将立即标记为回滚,并在 messages.log 中显示一条消息以及相关线程的详细信息,包括堆栈跟踪。
但是,您的应用程序可能不会立即注意到。如果它“挂”通过网络进行呼叫或进行CPU密集型计算,它将继续进行,并且只有在它接触事务性资源或检查事务状态等时,才会看到抛出异常。 / p>