import java.util.Map; import org.springframework.retry.backoff.FixedBackOffPolicy; import org.springframework.retry.policy.SimpleRetryPolicy; import org.springframework.retry.support.RetryTemplate; import com.citi.simpliciti.tempest.util.RawSerializableSupplier; public class SimpleRetryTemplateSupplier implements RawSerializableSupplier<RetryTemplate> { private int maxAttempts; private int backOffPeriod; private Map<Class<? extends Throwable>, Boolean> retryableExceptions; private transient RetryTemplate retryTemplate; public SimpleRetryTemplateSupplier(int maxAttempts, int backOffPeriod, Map<Class<? extends Throwable>, Boolean> retryableExceptions) { this.maxAttempts = maxAttempts; this.backOffPeriod = backOffPeriod; this.retryableExceptions = retryableExceptions; } @Override public RetryTemplate get() { if (retryTemplate == null) { SimpleRetryPolicy policy = new SimpleRetryPolicy(maxAttempts, retryableExceptions); FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy(); fixedBackOffPolicy.setBackOffPeriod(backOffPeriod); retryTemplate = new RetryTemplate(); retryTemplate.setRetryPolicy(policy); retryTemplate.setBackOffPolicy(fixedBackOffPolicy); } return retryTemplate; } }
@Bean public SimpleRetryTemplateSupplier tpsPositionRetryTemplateSupplier() { return new SimpleRetryTemplateSupplier(maxAttempts, backOffPeriod, ImmutableMap.of(RestClientException.class, true, JsonSyntaxException.class, true)); }