リトライ処理
Javaのリトライ処理の実装方法メモ。
■要件
- ある処理が失敗した場合、例外を投げる
- ある処理が失敗した場合は一定時間待ってから同じ処理を行う
- リトライ回数を指定できる
■サンプル
package jp.sample; import java.util.Date; import java.util.concurrent.TimeUnit; public class Main { private static final int RETRY_NUM = 3; private static final int RETRY_INTERVAL = 5; public static void main(String[] args) { for (int retryNum = 0; retryNum < RETRY_NUM; retryNum++) { try { // 何らかの処理。失敗した場合は例外を投げる。 System.out.println(retryNum + 1 + "回目の処理"); exeSamethingJob(); break; } catch (Exception e) { // try内の処理が失敗した場合、RETRY_INTERVALの間スリープする。 try { TimeUnit.SECONDS.sleep(RETRY_INTERVAL); } catch (InterruptedException e1) { e1.printStackTrace(); } } finally { } } System.out.println("リトライの甲斐なく処理失敗。。。"); } private static void exeSamethingJob() throws Exception { if ((new Date()).getTime() % 3 == 0) { System.out.println("処理成功!"); } else { System.out.println("処理失敗。。。"); throw new Exception(); } } }
■説明
- 2/3の確率で処理を失敗する
- リトライ回数は3回
- 処理に失敗した場合の待機時間は5秒
■ポイント
- 処理に失敗した場合はある例外を投げる(ここでは簡略化のためException)
- 例外をキャッチしてスリープする
- スリープ処理はTimeUnitを使用する
- リトライ回数分ループで囲む
- 成功したらブレイク