Package dev.failsafe

Class Failsafe

java.lang.Object
dev.failsafe.Failsafe

public class Failsafe extends Object
Simple, sophisticated failure handling.
  • Constructor Details

    • Failsafe

      public Failsafe()
  • Method Details

    • with

      @SafeVarargs public static <R, P extends Policy<R>> FailsafeExecutor<R> with(P outerPolicy, P... policies)
      Creates and returns a new FailsafeExecutor instance that will handle failures according to the given outerPolicy and policies. The policies are composed around an execution and will handle execution results in reverse, with the last policy being applied first. For example, consider:

         Failsafe.with(fallback, retryPolicy, circuitBreaker).get(supplier);
       

      This is equivalent to composition using the the compose method:

         Failsafe.with(fallback).compose(retryPolicy).compose(circuitBreaker).get(supplier);
       

      These result in the following internal composition when executing a runnable or supplier and handling its result:

         Fallback(RetryPolicy(CircuitBreaker(Supplier)))
       

      This means the CircuitBreaker is first to evaluate the Supplier's result, then the RetryPolicy, then the Fallback. Each policy makes its own determination as to whether the result represents a failure. This allows different policies to be used for handling different types of failures.
      Type Parameters:
      R - result type
      P - policy type
      Throws:
      NullPointerException - if outerPolicy is null
    • with

      public static <R> FailsafeExecutor<R> with(List<? extends Policy<R>> policies)
      Creates and returns a new FailsafeExecutor instance that will handle failures according to the given policies. The policies are composed around an execution and will handle execution results in reverse, with the last policy being applied first. For example, consider:

         Failsafe.with(Arrays.asList(fallback, retryPolicy, circuitBreaker)).get(supplier);
       

      This results in the following internal composition when executing a runnable or supplier and handling its result:

         Fallback(RetryPolicy(CircuitBreaker(Supplier)))
       

      This means the CircuitBreaker is first to evaluate the Supplier's result, then the RetryPolicy, then the Fallback. Each policy makes its own determination as to whether the result represents a failure. This allows different policies to be used for handling different types of failures.
      Type Parameters:
      R - result type
      Throws:
      NullPointerException - if policies is null
      IllegalArgumentException - if policies is empty
    • none

      public static <R> FailsafeExecutor<R> none()
      Creates and returns a noop FailsafeExecutor instance that treats any exception as a failure for the purposes of calling event listeners, and provides no additional failure handling.
      Type Parameters:
      R - result type
      Throws:
      NullPointerException - if policies is null
      IllegalArgumentException - if policies is empty