(DBへの)データ登録の失敗時にリトライ処理を入れたい場合があり、その際に、Spring-Retryでリトライ処理を実装してみましたので、メモを残しておきます。
今回は例として、unique制約のあるカラムにデータをinsertする際に、同じ値があればリトライするというケースです。
①build.gradleのdependenciesに以下を追記し、Spring-Retryを追加 compile ( 'org.springframework.retry:spring-retry' ) compile ( 'org.springframework.boot:spring-boot-starter-aop' ) ②利用したい @Configuration なクラスに @EnableRetry を追加@Configuration
@EnableRetry
public class AppConfig { ... }
リトライ処理
Retryable
下記のサンプルのように@Retryableをつける事により、UniqueConstraintExceptionが発生した際は(デフォルトで上限3回まで)リトライするようにしています。
@Retryable(value = { UniqueConstraintException.class })
public void retryService() throws UniqueConstraintException {
this.dao.insert("hash化された文字列が入るよ!");
また、maxAttemptsを設定し、3回以上リトライすることもできる。
※下記の例では5回リトライしている
@Retryable(value = { UniqueConstraintException.class }, maxAttempts = 5)
他にもリトライの間隔をbackoffで指定できたり、複数のExceptionを扱うこともできます。
@Retryable(value = { UniqueConstraintException.class, HogeException.class }, maxAttempts = 5, backoff = @Backoff(delay = 5000))
https://www.baeldung.com/spring-retry
https://github.com/spring-projects/spring-retry