Resilience4j
============
https://github.com/spring-boot-tutorials/spring-cloud-circuitbreaker-resilience4j
In this article we will configure Resilience4j in Spring Boot.
Create Initial Code Base
------------------------
- Go to https://start.spring.io/
- Add the following dependencies:
- spring-cloud-starter-circuitbreaker-resilience4j
- spring-boot-starter-web
- Click ``Generate``
Dependencies
------------
Dependencies used in ``pom.xml``
.. code-block:: xml
org.springframework.cloud
spring-cloud-starter-circuitbreaker-resilience4j
org.springframework.boot
spring-boot-starter-web
Service
-------
Create a new file ``src/main/java/com/example/circuitbreaker_resilience4j/DefaultService.java``:
.. code-block:: java
@Service
public class DefaultService {
@Autowired
private CircuitBreakerFactory circuitBreakerFactory;
private final RestTemplate restTemplate = new RestTemplate();
public String getAlbumList() {
System.out.println("INSIDE getAlbumList()");
CircuitBreaker circuitBreaker = circuitBreakerFactory.create("circuitbreaker");
String url = "http://localhost:1234/not-real";
return circuitBreaker.run(
() -> restTemplate.getForObject(url, String.class),
throwable -> getFallbackAlbumList());
}
private String getFallbackAlbumList() {
System.out.println("INSIDE getFallbackAlbumList()");
CircuitBreaker circuitBreaker = circuitBreakerFactory.create("circuitbreaker");
String url = "https://jsonplaceholder.typicode.com/albums";
return circuitBreaker.run(() -> restTemplate.getForObject(url, String.class));
}
}
Main
----
Now let's use this service.
Go back to ``MainApplication.java`` and add the following:
.. code-block:: java
@SpringBootApplication
public class CircuitbreakerResilience4jApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(CircuitbreakerResilience4jApplication.class, args);
}
@Autowired
private DefaultService defaultService;
@Override
public void run(String... args) throws Exception {
System.out.println(defaultService.getAlbumList().replace("\n", "").replace("\r", "").replaceAll("\\s+", ""));
}
}
Run Application
---------------
Open terminal at project root and execute the following:
.. code-block:: sh
mvn spring-boot:run
There should be no errors and the output will display all the CRUD operations.
Configuration (optional)
------------------------
See: https://www.baeldung.com/spring-cloud-circuit-breaker#global-custom-configuration
.. code-block:: java
@Configuration
public class DefaultConfiguration {
}