如何在 WebSphere Liberty Batch 中配置事务超时?

How do I configure a transaction timeout in WebSphere Liberty Batch?

编辑 2016 年 12 月 2 日: 重新设计了对应用程序事务设置超时值“0”时的默认行为的解释。

概述

让我描述一下应用程序级选项以及它如何与服务器级超时交互。

在 WebSphere Liberty Java Batch 的块步骤中,您可以设置应用程序级超时,或将超时值 '0' 设置为默认值到服务器级超时。

此外,您还可以通过单独的服务器级设置为任何非零应用程序级超时值设置上限。

应用程序级超时

块事务超时可以设置为:

在 XML(静态)

在具有特殊步骤 属性 的 JSL 中的步骤级别:javax.transaction.global.timeout (秒)

例如

<step id="MyStep"> 
   <properties> 
      <!-- In seconds -->
      <property name="javax.transaction.global.timeout" value="120"/>   

如果XML中没有明确定义,则默认为180(秒)。

在Java(动态)

如果你需要更多 dynamic/programmatic 控制,你可以实现自定义 CheckpointAlgorithm and write its checkpointTimeout() 到 return 任何你想要的(即使你真的想要,每个块都有不同的值)。

服务器(JVM)级超时

设置应用程序超时值的上限

您可以防止应用程序设置过大的超时值。

在服务器配置 (server.xml) 中使用 propogatedOrBMTTranLifetimeTimeout :

<transaction propogatedOrBMTTranLifetimeTimeout="90s"/>

这将作为任何 非零 应用程序超时值的上限,通过 javax.transaction.global.timeout 或您的 checkpointTimeout() 方法,

未设置应用程序超时时的默认超时

如果 javax.transaction.global.timeout 设置为 '0' 或者 checkpointTimeout() 方法returns '0',您将从服务器获得默认超时。

此超时值默认为 120 秒。

要更改服务器配置 (server.xml),请使用 totalTranLifetimeTimeout,例如:

<transaction totalTranLifetimeTimeout="60s"/>

注:

如上所述,但是,如果根本没有设置 javax.transaction.global.timeout,则应用程序超时默认为 180,因此 totalTranLifetimeTimeout 没有发挥作用。

其他注释/参考资料

注意: WDT 工具的 设计视图 使使用和记住这些服务器配置属性值变得更加容易。

映射到 WebSphere Application Server 传统配置

这里的propogatedOrBMTTranLifetimeTimeout属性基本上映射到传统的Maximum transaction timeout,而totalTranLifetimeTimeout 更明显地映射了传统的 Total transaction lifetime timeout

this documentation 中描述了一些很好的示例,这些示例在很大程度上与 Liberty 相关。