如何在Play 2.5 HikariCP中启用Dropwizard指标?

时间:2016-03-31 17:04:48

标签: playframework playframework-2.5

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();