spring-retry λΌμ΄λΈλ¬λ¦¬
λ©μλ μ€ν μ€ μΌμμ μΈ μ€λ₯ λλ μμΈ μν©μμ μλμΌλ‘ λ©μλλ₯Ό μ¬μλν μ μλλ‘ λμμ£Όλ λΌμ΄λΈλ¬λ¦¬
<!-- https://mvnrepository.com/artifact/org.springframework.retry/spring-retry -->
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>{μ¬μ©νλ €λ λ²μ }</version>
</dependency>
// https://mvnrepository.com/artifact/org.springframework.retry/spring-retry
implementation 'org.springframework.retry:spring-retry:{μ¬μ©νλ €λ λ²μ }}'
@Retryable μ΄λ
Έν
μ΄μ
μ¬μλ λ‘μ§μ μ μ©ν λ©μλ μ μ¬μ©νλ μ΄λ
Έν
μ΄μ
μ΄λ
Έν
μ΄μ
μ μμ±μ μ€μ νμ¬ λμ μ μ΄
@ Service
public class MyService {
@ Retryable (
value = { NetworkException .class },
maxAttempts = 3 ,
backoff = @ Backoff (delay = 2000 )
)
public void fetch () {
// NetworkExceptionμ΄ λ°μν κ²½μ°, μ΅λ 3λ² μ¬μλνκ³ 2μ΄ κ°κ²©μΌλ‘ λλ μ΄
}
}
λ°±μ€ν (Backoff) μ λ΅
μ¬μλ μκ° κ°κ²© μ μ‘°μ νλ μ λ΅
@Retryable μ΄λ
Έν
μ΄μ
μ backoff μμ±μ μ€μ νμ¬ μ΄κΈ° λλ μ΄, μ΅λ μ¬μκ° μκ° λ±μ ꡬμ±ν μ μλ€.
// ...
@ Retryable (
value = { NetworkException .class },
maxAttempts = 5 ,
backoff = @ Backoff (delay = 100 , multiplier = 2 )
)
public void fetch () {
// NetworkException μ΄ λ°μν κ²½μ°, μ΅λ 5λ² μ¬μλνκ³ μ§μμ μΌλ‘ μ¦κ°νλ λλ μ΄ μ μ©
}
μ¬μλ μ μ±
(Retry Policy)
μ¬μλ λμ μ μ μ΄νλ μ μ±
μμΈ νμ
, μ΅λ μ¬μκ° νμ λ±μ μ€μ νμ¬ μΈμ μ¬μλν μ§λ₯Ό κ²°μ ν μ μλ€.
RetryTemplate
@Retryable μ΄λ
Έν
μ΄μ
μΈμλ νλ‘κ·Έλλ° λ°©μ μΌλ‘ μ¬μλ λ‘μ§μ ꡬνν μ μλλ‘ λμμ£Όλ μ νΈλ¦¬ν° ν΄λμ€
@ Service
public class MyService {
private final RetryTemplate retryTemplate ;
public MyService () {
retryTemplate = new RetrtyTemplate ();
FixedBackoffPolicy backoffPolicy = new FixedBackoffPolicy ();
backoffPolicy .setBackoffPeriod (500 );
retryTemplate .setBackoffPolicy (backoffPolicy );
SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy ();
simpleRetryPolicy .setMaxAttempts (3 );
retryTemplate .setRetryPolicy (simpleRetryPolicy );
}
public void fetch () {
retryTemplate .execute (context -> {
// μΈλΆ μλΉμ€ νΈμΆ λλ λ°μ΄ν° λ‘λ μμ
μν
return null ; // κ²°κ³Ό λ°ν
});
}
}
RetryTemplateλ₯Ό μ¬μ©νμ¬ μ¬μλ λ‘μ§μ νλ‘κ·Έλλ° λ°©μμΌλ‘ ꡬνν μμ μμ€
backoffPolicyμ RetryPolicyλ₯Ό μ€μ νμ¬ μ¬μλ κ°κ²©κ³Ό μ΅λ μ¬μλ νμλ₯Ό μ§μ νκ³ , execute() λ©μλ λ΄μμ μ¬μλν μμ
μ μννλ€.