【问题标题】:Is it possible to have a circuit break for the database with Spring Boot?是否可以使用 Spring Boot 对数据库进行断路?
【发布时间】:2022-06-24 02:56:58
【问题描述】:
使用 Spring Boot 为外部调用(例如 HTTP)设置断路器是一种很容易实施的常见模式,例如使用 Resilience4j。
我找不到任何关于通过resilience4j 或其他常见模式对数据库调用执行相同操作的信息,这对我来说是出乎意料的。
假设我们有一个服务,它通过一个简单的 JDBC 连接到一个传统的 SQL 数据库。如果数据库由于某种原因出现故障,我希望能够在控制器级别停止对服务的所有传入请求,直到连接恢复。有没有办法为通过数据库连接发生的所有事务实现本质上的断路器功能?
【问题讨论】:
标签:
java
spring-boot
circuit-breaker
resilience4j
【解决方案1】:
是的,这是可能的。本书Spring Microservices in Action 的第 7 章给出了一个例子。实际上,您以与 HTTP 调用相同的方式处理 SQL 调用:
@CircuitBreaker(name = "entityService") ❶
public List<Entity> getEntity(String entityId) {
return entityRepository.findByEntityId(entityId);
}
您将需要以下依赖项:
io.github.resilience4j:resilience4j-spring-boot2
io.github.resilience4j:resilience4j-circuitbreaker
io.github.resilience4j:resilience4j-timelimiter
org.springframework.boot:spring-boot-starter-aop
这是使用 AOP 模式,在不修改代码本身的情况下向现有代码添加新行为。