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
+
+