diff --git a/spring-vault-core/pom.xml b/spring-vault-core/pom.xml index a37213556..ba80a61a0 100644 --- a/spring-vault-core/pom.xml +++ b/spring-vault-core/pom.xml @@ -207,6 +207,12 @@ true + + org.springframework.retry + spring-retry + true + + diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTemplate.java index d17757339..41c3e3d8b 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTemplate.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTemplate.java @@ -28,6 +28,7 @@ import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.lang.Nullable; +import org.springframework.retry.support.RetryTemplate; import org.springframework.util.Assert; import org.springframework.vault.authentication.ClientAuthentication; import org.springframework.vault.authentication.SessionManager; @@ -58,6 +59,9 @@ public class VaultTemplate implements InitializingBean, VaultOperations, Disposa private final RestTemplate sessionTemplate; + @Nullable + private RetryTemplate retryTemplate; + @Nullable private SessionManager sessionManager; @@ -267,6 +271,17 @@ public void setSessionManager(SessionManager sessionManager) { this.sessionManager = sessionManager; } + /** + * Set the {@link RetryTemplate}. + * @param retryTemplate must not be {@literal null}. + */ + public void setRetryTemplate(RetryTemplate retryTemplate) { + + Assert.notNull(retryTemplate, "RetryTemplate must not be null"); + + this.retryTemplate = retryTemplate; + } + @Override public void afterPropertiesSet() { Assert.notNull(this.sessionManager, "SessionManager must not be null"); @@ -445,7 +460,9 @@ public T doWithSession(RestOperationsCallback sessionCallback) { Assert.notNull(sessionCallback, "Session callback must not be null"); try { - return sessionCallback.doWithRestOperations(this.sessionTemplate); + return retryTemplate != null + ? retryTemplate.execute(retryContext -> sessionCallback.doWithRestOperations(this.sessionTemplate)) + : sessionCallback.doWithRestOperations(this.sessionTemplate); } catch (HttpStatusCodeException e) { throw VaultResponses.buildException(e); diff --git a/spring-vault-dependencies/pom.xml b/spring-vault-dependencies/pom.xml index 583e7e4c7..c8d570634 100644 --- a/spring-vault-dependencies/pom.xml +++ b/spring-vault-dependencies/pom.xml @@ -67,6 +67,7 @@ v1-rev20201112-1.31.0 0.22.2 1.67 + 1.3.0 @@ -160,6 +161,15 @@ true + + + + org.springframework.retry + spring-retry + ${spring-retry.version} + true + +