かとじゅんの技術日誌

技術の話をするところ

Cloneアノテーション&例外のハンドリング

ちょっと思いつきですが, @Cloneで当該ジョブの複製する数を指定するとJobExecutorServiceによって複製されます。これもジョブに割り当てたスレッドプールの上限によります。複製したジョブの待機ですが@Join(JoinType.Wait)とした場合、複製したすべてのジョブが終了するまで次のジョブに遷移しません。@Join(JoinType.NoWait)の場合は待機しませんが、遷移先のジョブが複数起動されるわけではありません。以下の例では、doJobAを5個複製でNoWaitで実行し、そのあとすぐにdoJobBに遷移します。

	// ジョブメソッドA
	@Group("groupA")
	@Next("jobB")
	@Clone(5)
	@Join(JoinType.NoWait)
	public void doJobA() throws Exception {
		for (int i = 1; i < 5; i++) {
			try {

				TimeUnit.SECONDS.sleep(1);
			} catch (InterruptedException e) {
				break;
			}
			log.info("doJobA");
		}
	}

あと、ジョブメソッドから例外をスローしてもきちんとハンドリングされます。基本的には例外がスローされると実行中および予約済みのタスクのキャンセルを行う実装にしようかと思います。