強制停止リスナ

強制停止リスナは、可能な限り速やかにジョブを停止させることを可能にする為の部品です。
強制停止リスナが追加されたステップの実行中に、ジョブの強制停止要求(jobctl stop --force, stop-job --force)を受け付けると、強制停止リスナは例外をthrowします。これにより、当該ステップの途中で処理を中断し、ジョブが停止します。
強制停止リスナには、チャンク志向タスクレット(ChunkOrientedTasklet)向けの BSForceStopListener と、汎用タスクレット向けの BSForceStopDetectionListener があります。

BSForceStopListener

概要

BSForceStopListener は、チャンク志向タスクレット(ChunkOrientedTasklet)向けのリスナクラスです。
BSForceStopListener は、以下のタイミングで停止要求の有無のチェックを行います。

ジョブの強制停止要求(jobctl stop --force, stop-job --force)を行っても、上記タイミングに至るまでの間ジョブ、および、ステップは停止されません。

BSForceStopListener を使用するには、ジョブ定義ファイル中の各ステップのリスナに対して、以下のように設定します。

BSForceStopListener のBean定義例
 <step id="step">
     <tasklet>
         <chunk ...chunk settings.../>
         <listeners>
             <listener class="com.nec.webotx.batch.util.BSForceStopListener"/>
         </listeners>
     </tasklet>
 </step>
関連

BSForceStopDetectionListener

概要

BSForceStopDetectionListener は、強制停止処理をステップ内の任意のポイントで行えるようにする為のリスナクラスです。
強制要求の有無の確認と、強制停止をステップ内の任意のポイントで行う為のインターフェースを提供しています。

BSForceStopDetectionListener を使用するには、以下例のようにジョブ定義ファイル中の各ステップのリスナに対して設定し、ステップ内で実行される任意のポイントに強制停止判定ロジックを追加します。

BSForceStopDetectionListener のBean定義例
 <step id="step">
     <tasklet>
         <... setting... />
         <b:listeners>
             <b:listener ref="stopListener"/>
         </listeners>
     </tasklet>
 </step>
 
 <bean id="stopListener" class="com.nec.webotx.batch.util.BSForceStopDetectionListener" />

 <bean id="writer" class="some.user.package.ForceStopDetectionExample">
 	<property name="forceStopDetectionListener" ref="stopListener"></property>
 </bean>
強制停止判定ロジック例
 public class ForceStopDetectionExample {
     private BSForceStopDetectionListener forceStopDetectionListener;
 
     ... accessor methods for forceStopDetectionListener ...
 
         :

     private void detectForceStop() {
         if (forceStopDetectionListener.checkForceStop()) {
             forceStopDetectionListener.triggerForceStop();
         }
     }
 }
関連