4

Play 2.5 中使用的 HikariCP 数据库连接池支持 Dropwizard Metrics。推荐的方法是使用HikariConfig.setMetricRegistry(MetricRegistry),但 Play 似乎没有为 HikariConfig 使用依赖注入。是否有其他选项可以在 Play HikariCP 上设置 MetricRegistry?

4

2 回答 2

3

您可以使用访问 HikaryDatasource

@Singleton
class InitMetricRegistry @Inject () (@NamedDatabaseProvider("default") val defaultDB: Database){
  val ds: HikariDataSource = defaultDB.dataSource.asInstanceOf[HikariDataSource]
  ds.setMetricRegistry(???)
}

要在启动时初始化指标,请使用急切绑定 https://www.playframework.com/documentation/2.5.x/ScalaDependencyInjection#Eager-bindings

于 2016-04-01T15:48:13.790 回答
3

使用@JonasAnso 提到的相同方法解决了这个问题。这是Java片段。

public class AppInitProcessor {
    @Inject
    public AppInitProcessor(Database db, MetricRegistry metricRegistry) {
        if (db.getDataSource() instanceof HikariDataSource) {
            HikariDataSource dataSource = ((HikariDataSource) db.getDataSource());
            if (dataSource.getMetricRegistry() == null) {
                dataSource.setMetricRegistry(metricRegistry);
            }
        }
    }
}

然后将 AppInitProcessor 绑定为来自自定义 Guice 模块的热切单例。

MetricRegistry metrics = new MetricRegistry();
// configure MetricsRegistry ...
bind(MetricRegistry.class).toInstance(metrics);
// bind app startup
bind(AppInitProcessor.class).asEagerSingleton();
于 2016-04-01T19:39:29.923 回答