In this post under Spring Retry, I will show with example how to configure UniformRandomBackOffPolicy using RetryTemplateBuilder.
But before that lets recap what is UniformRandomBackOffPolicy.
UniformRandomBackOffPolicy chooses a random time in ms between user configured MinBackOffPeriod and MaxBackOffPeriod and then before a failed operations is retried, it pauses for that time.
For our example we will use the below Service class
Service Class
import java.util.Date;
public class Service5 {
private int i = 0;
public void executeWithException() {
i = i + 1;
System.out.println("Executing method 'executeWithException' : " + i + " at " + new Date());
throw new NullPointerException();
}
}
The above Service class has one method named “executeWithException” that will throw NullPointerException.
Below is the xml code for your reference
XML code
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="service5" class="Service5"/>
</beans>
In the above xml code, I have a bean definition for Service class.
Next we will see the main code where we configure UniformRandomBackOffPolicy using RetryTemplateBuilder class
Main class
1 import org.springframework.context.ApplicationContext;
2 import org.springframework.context.support.ClassPathXmlApplicationContext;
3 import org.springframework.retry.support.RetryTemplate;
4
5 public class Example21 {
6 public static void main(String[] args) {
7 ApplicationContext context = new ClassPathXmlApplicationContext("Example21.xml");
8 Service5 service5 = (Service5) context.getBean("service5");
9 RetryTemplate retryTemplate = RetryTemplate.builder().uniformRandomBackoff(60000, 600000).build();
10
11 retryTemplate.execute(retryContext -> { service5.executeWithException(); return null; });
12 }
13 }
In the above java code, at line 9, we create RetryTemplate instance configured with UniformRandomBackOffPolicy by calling the below method
RetryTemplate.builder().uniformRandomBackoff(60000, 600000).build();
As per the code, it creates a RetryTemplate instance with UniformRandomBackOffPolicy configured and the UniformRandomBackOffPolicy will choose a random value between 60000 and 600000 and wait for that time before retrying the failed operation.
In this way we can configure UniformRandomBackOffPolicy using RetryTemplateBuilder class.