答案 0 :(得分:6)
(编辑2016-12-02:在为应用程序事务设置了超时值' 0'后,重新设置了默认行为的说明。)
让我描述一下应用程序级选项以及它与服务器级超时的交互方式。
在WebSphere Liberty Java Batch的一个块步骤中,您可以设置应用程序级别超时,或将' 0' 的超时值设置为默认为服务器 - 等级超时。
此外,您还可以通过单独的服务器级设置为任何非零应用程序级超时值设置上限。
块事务超时可以设置为:
在具有特殊步骤属性的JSL的步骤级别: javax.transaction.global.timeout (秒)
E.g。
<step id="MyStep">
<properties>
<!-- In seconds -->
<property name="javax.transaction.global.timeout" value="120"/>
如果未在XML中明确定义,则默认为180(秒)。
如果您需要更多动态/程序控制,您可以实现自定义CheckpointAlgorithm并编写其checkpointTimeout()以返回您想要的任何内容(即使您真的想要,也会为每个块提供不同的值)。
您可以阻止应用程序设置过大的超时值。
在服务器配置(server.xml)中使用 propogatedOrBMTTranLifetimeTimeout :
<transaction propogatedOrBMTTranLifetimeTimeout="90s"/>
这将作为任何非零应用程序超时值的上限,可以通过javax.transaction.global.timeout
或 checkpointTimeout()方法
如果javax.transaction.global.timeout
设置为&#39; 0&#39; ,或者 checkpointTimeout()方法返回&#39; 0&#39; ,您将从服务器获得默认超时。
此超时值默认为120秒。
要更改服务器配置(server.xml),请使用 totalTranLifetimeTimeout ,例如:
<transaction totalTranLifetimeTimeout="60s"/>
如上所述,如果javax.transaction.global.timeout
未设置,则应用程序超时默认为180,因此 totalTranLifetimeTimeout 执行 NOT 发挥作用。
注意: WDT工具设计视图可以更轻松地使用和记住这些服务器配置属性值。
这里的 propogatedOrBMTTranLifetimeTimeout 属性基本上映射到传统的最大事务超时,而 totalTranLifetimeTimeout 更明显地映射总事务传统的终身超时。
在this documentation中描述了一些很好的例子,这些例子在Liberty中仍然很重要。