如何设置 Spring 启动以使组件计量而不向每个 class 添加 @Timed,而是指定已使用的注释,如 @Service
How to set up Spring Boot to make component metered without adding @Timed to each class, but rather specifying already used annotations like @Service
我有一个 Spring 引导应用程序,其中充满了端点(即 @Controller
)和 @Service
,后面还有 @Repository
。我想让它们全部将定时指标导出到 Micrometer。在某些时候,我也想禁用它们。在某些时候,我需要测量,例如,所有标记为 classes 的 @Service
方法或测量 @Repository
的时间。所以我不喜欢所有已经保留 @Service
注释的 class 插入和删除 @Timed
,我必须考虑如何使用 Spring 存储库的数据接口。
我应该设置什么样的bean MeterRegistry
考虑到所有@RestController
标记的代码已经有@Timed
注释,使这个配置易于打开和打开关掉 属性?我知道,对于传入的 http 请求 management.metrics.web.server.request.autotime.enabled=true
会使用这个技巧来获取传入的 http 请求的时间,这对我有用。
但是,如果可能的话,我可能希望将同样的内容应用于服务和存储库层。但是没有办法确定什么是真正的服务,而不是 @Service
注释。因此,由于我不喜欢在那里明确添加 @Timed
,可以进行什么样的设置来使 MeterRegistry
考虑标记为 class 的 @Service
中的任何方法以及任何Spring 应用程序中的数据存储库?
没有out-of-the-box解决方案,但你可以自己实现,例如,使用Spring AOP。
您可以查看 TimedAspect 源代码,尤其是 @Around
方面的 @Timed
注释,并为 @Service
或 @Repository
重新创建它。
我有一个 Spring 引导应用程序,其中充满了端点(即 @Controller
)和 @Service
,后面还有 @Repository
。我想让它们全部将定时指标导出到 Micrometer。在某些时候,我也想禁用它们。在某些时候,我需要测量,例如,所有标记为 classes 的 @Service
方法或测量 @Repository
的时间。所以我不喜欢所有已经保留 @Service
注释的 class 插入和删除 @Timed
,我必须考虑如何使用 Spring 存储库的数据接口。
我应该设置什么样的bean MeterRegistry
考虑到所有@RestController
标记的代码已经有@Timed
注释,使这个配置易于打开和打开关掉 属性?我知道,对于传入的 http 请求 management.metrics.web.server.request.autotime.enabled=true
会使用这个技巧来获取传入的 http 请求的时间,这对我有用。
但是,如果可能的话,我可能希望将同样的内容应用于服务和存储库层。但是没有办法确定什么是真正的服务,而不是 @Service
注释。因此,由于我不喜欢在那里明确添加 @Timed
,可以进行什么样的设置来使 MeterRegistry
考虑标记为 class 的 @Service
中的任何方法以及任何Spring 应用程序中的数据存储库?
没有out-of-the-box解决方案,但你可以自己实现,例如,使用Spring AOP。
您可以查看 TimedAspect 源代码,尤其是 @Around
方面的 @Timed
注释,并为 @Service
或 @Repository
重新创建它。