gpt4 book ai didi

database - 为什么我的千分尺在应用程序启动后只执行一次?

转载 作者:行者123 更新时间:2023-12-04 12:25:40 24 4
gpt4 key购买 nike

我想实现一个千分尺,以监控我的数据库中的记录量。所以我用 spring-boot-starter-aop 创建了一个方面这是在我的服务方法被调用后执行的。

方面:

@Slf4j
@Aspect
@Configuration
public class ContactAmountAspect {

@Autowired
ContactRepository contactRepository;

@Autowired
MeterRegistry registry;

@AfterReturning(value = "execution(* mypackage.ContactService.*(..))")
public void monitorContactAmount() {
Gauge
.builder("contacts.amount", contactRepository.findAll(), List::size)
.register(registry);
log.info("Amount of contacts in database: {}", contactRepository.findAll().size());
}
}

关于 /prometheus端点我只看到应用程序启动后第一次调用的联系人数量。
如果我现在调用我的 POST 休息端点并将联系人添加到我的数据库,只有我的 log.info打印出新的触点数量,但我的仪表什么也不做。
命令:
1. App Startup (let's say with 1 contact in DB)
2. Call Rest Endpoint "getAllContacts"
3. My AOP method starts
4. The gauge monitors contact amount of 1
5. the logger logs contact amount of 1
6. Call Rest Endpoint "postOneContact"
7. My AOP method starts
8. The gauge does nothing or monitors still the amount of 1
9. the logger logs contact amount of 2

我究竟做错了什么?

或者有没有另一种方法来监控数据库表中的记录数量???

最佳答案

实际上,问题在于 Gauge 指标的初始化不正确。您应该像这样声明这个指标:
测量
.builder("contacts.amount", contactRepository, ContactRepository::count)
.注册(注册);

这段代码对我有用!

关于database - 为什么我的千分尺在应用程序启动后只执行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53117329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com