Class ExponentialBackOff

java.lang.Object
org.springframework.util.backoff.ExponentialBackOff
All Implemented Interfaces:
BackOff

public class ExponentialBackOff extends Object implements BackOff
Implementation of BackOff that increases the back-off period for each attempt. When the interval has reached the max interval, it is no longer increased. Stops once the max elapsed time or max attempts has been reached.

Example: The default interval is 2000L ms; the default multiplier is 1.5; and the default max interval is 30000L. For 10 attempts the sequence will be as follows:

 request#     back-off

  1              2000
  2              3000
  3              4500
  4              6750
  5             10125
  6             15187
  7             22780
  8             30000
  9             30000
 10             30000
 

Note that the default max elapsed time is Long.MAX_VALUE, and the default maximum number of attempts is Integer.MAX_VALUE. Use setMaxElapsedTime(long) to limit the length of time that an instance should accumulate before returning BackOffExecution.STOP. Alternatively, use setMaxAttempts(int) to limit the number of attempts. The execution stops when either of those two limits is reached.

Since:
4.1
Author:
Stephane Nicoll, Gary Russell, Juergen Hoeller
  • Field Details

    • DEFAULT_INITIAL_INTERVAL

      public static final long DEFAULT_INITIAL_INTERVAL
      The default initial interval: 2000L ms.
      See Also:
    • DEFAULT_JITTER

      public static final long DEFAULT_JITTER
      The default jitter value for each interval: 0L ms.
      Since:
      7.0
      See Also:
    • DEFAULT_MULTIPLIER

      public static final double DEFAULT_MULTIPLIER
      The default multiplier (increases the interval by 50%): 1.5.
      See Also:
    • DEFAULT_MAX_INTERVAL

      public static final long DEFAULT_MAX_INTERVAL
      The default maximum back-off time: 30000L ms.
      See Also:
    • DEFAULT_MAX_ELAPSED_TIME

      public static final long DEFAULT_MAX_ELAPSED_TIME
      The default maximum elapsed time: unlimited.
      See Also:
    • DEFAULT_MAX_ATTEMPTS

      public static final int DEFAULT_MAX_ATTEMPTS
      The default maximum attempts: unlimited.
      Since:
      6.1
      See Also:
  • Constructor Details

  • Method Details

    • setInitialInterval

      public void setInitialInterval(long initialInterval)
      Set the initial interval.
      Parameters:
      initialInterval - the initial interval in milliseconds
    • getInitialInterval

      public long getInitialInterval()
      Return the initial interval in milliseconds.
    • setJitter

      public void setJitter(long jitter)
      Set the jitter value to apply for each interval, leading to random milliseconds to be subtracted or added and resulting in a value between interval - jitter and interval + jitter but never below initialInterval or above maxInterval.

      If a multiplier is specified, it is applied to the jitter value as well.

      Parameters:
      jitter - the jitter value in milliseconds
      Since:
      7.0
    • getJitter

      public long getJitter()
      Return the jitter value to apply for each interval in milliseconds.
      Since:
      7.0
    • setMultiplier

      public void setMultiplier(double multiplier)
      Set the value to multiply the current interval by for each attempt.

      This applies to the initial interval as well as the jitter range.

      Parameters:
      multiplier - the multiplier (must be greater than or equal to 1)
    • getMultiplier

      public double getMultiplier()
      Return the value to multiply the current interval by for each attempt.
    • setMaxInterval

      public void setMaxInterval(long maxInterval)
      Set the maximum back-off time in milliseconds.
    • getMaxInterval

      public long getMaxInterval()
      Return the maximum back-off time in milliseconds.
    • setMaxElapsedTime

      public void setMaxElapsedTime(long maxElapsedTime)
      Set the maximum elapsed time in milliseconds after which a call to BackOffExecution.nextBackOff() returns BackOffExecution.STOP.
      Parameters:
      maxElapsedTime - the maximum elapsed time
      See Also:
    • getMaxElapsedTime

      public long getMaxElapsedTime()
      Return the maximum elapsed time in milliseconds after which a call to BackOffExecution.nextBackOff() returns BackOffExecution.STOP.
      Returns:
      the maximum elapsed time
      See Also:
    • setMaxAttempts

      public void setMaxAttempts(int maxAttempts)
      The maximum number of attempts after which a call to BackOffExecution.nextBackOff() returns BackOffExecution.STOP.
      Parameters:
      maxAttempts - the maximum number of attempts
      Since:
      6.1
      See Also:
    • getMaxAttempts

      public int getMaxAttempts()
      Return the maximum number of attempts after which a call to BackOffExecution.nextBackOff() returns BackOffExecution.STOP.
      Returns:
      the maximum number of attempts
      Since:
      6.1
      See Also:
    • start

      public BackOffExecution start()
      Description copied from interface: BackOff
      Start a new back off execution.
      Specified by:
      start in interface BackOff
      Returns:
      a fresh BackOffExecution ready to be used
    • toString

      public String toString()
      Overrides:
      toString in class Object