扩展 DataSourcePublicMetrics 以获得额外的指标

Extending DataSourcePublicMetrics to get additional metrics

我们正在使用实现多租户的自定义数据源。 (我们有一个 DataSource bean,它充当其他数据源的代理,租户上下文是使用 ThreadLocal 变量设置的。我的要求是获取由该单个 DataSource Bean 代理的各个数据源的指标。)基本上,我需要以某种方式添加额外的指标。似乎最好的方法是扩展 DataSourcePublicMetrics,因为 PublicMetricsAutoConfiguration 有条件地创建了这个 bean。问题是 DataSourcePublicMetrics 中的字段都是私有的,因此难以重用。我看到的唯一解决方案是隐藏所有内部变量并覆盖 public 方法。有没有更好的办法?我正在使用 spring-boot 1.2.2.RELEASE.

使用组合而不是继承。

MyCustomMetrics implements PublicMetrics

执行器拾取任何实现 PublicMetrics 的 bean,以在 /metrics 中公开。 DataSourcePublicMetrics 实现了这个接口。

然后将 DataSourcePublicMetrics bean 注入 MyCustomMetrics(这甚至可以是您的自定义数据源,但最好创建一个不同的 class)。实现PublicMetrics的合约。

public Collection<Metric<?>> metrics()

只需将其推迟到 DataSourcePublicMetrics 实现,并添加您想要的任何自定义指标。