Live By The Code

元業務系プログラマの呟き

jbatchのトランザクションのタイムアウト

jbatchではデフォルトでトランザクションに180秒のタイムアウトが設定されており、タイムアウトを超えると例外が発生してバッチが異常終了するようになっている。

発生する例外は以下のような感じ。

com.sun.appserv.connectors.internal.api.PoolingException: 
javax.transaction.RollbackException 

そもそもそんなにトランザクションが長くなるバッチは設計上如何なものか、という検討も必要かもしれないが、とりあえずタイムアウトする秒数はstep要素のjavax.transaction.global.timeoutプロパティで制御できる。

0を指定すればタイムアウト無しになるようだが

The value of the timeout in seconds. If the value is zero,
     *        the transaction service restores the default value. If the value
     *        is negative a SystemException is thrown.

javadocにこんな風に書かれているので止めたほうが無難かも

ジョブ定義XMLへの記載例は以下のようになる。

<step id="step1">
    <properties> 
        <property name="javax.transaction.global.timeout" value="0"/> 
    </properties>
    <chunk>
      ...
    </chunk>
</step>