【问题标题】:How to enable Dropwizard Metrics in Play 2.5 HikariCP?如何在 Play 2.5 HikariCP 中启用 Dropwizard Metrics?
【发布时间】:2016-03-31 17:04:47
【问题描述】:

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

【问题讨论】:

    标签: playframework playframework-2.5


    【解决方案1】:

    您可以使用

    访问 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

    【讨论】:

    • 谢谢。事实上,这就是我昨天最终做的事情,我将发布我的解决方案(用 Java 语言)作为单独的答案。
    • 不客气。 Java 解决方案做得很好。享受游戏。
    【解决方案2】:

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

    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();
    

    【讨论】: