ぺーぺーSEのブログ

備忘録・メモ用サイト。

リトライ処理

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秒

■ポイント