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

Playframework 如何在Play 2.5 HikariCP中启用Dropwizard指标?,playframework,playframework-2.5,Playframework,Playframework 2.5,播放2.5中使用的HikariCP数据库连接池。推荐的方法是使用HikariConfig.setMetricRegistry(MetricRegistry),但Play似乎没有对HikariConfig使用依赖项注入。是否有其他选项可以在播放HikariCP时设置MetricRegistry?您可以使用 @Singleton class InitMetricRegistry @Inject () (@NamedDatabaseProvider("default") val defaultDB:

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

您可以使用

@Singleton
class InitMetricRegistry @Inject () (@NamedDatabaseProvider("default") val defaultDB: Database){
  val ds: HikariDataSource = defaultDB.dataSource.asInstanceOf[HikariDataSource]
  ds.setMetricRegistry(???)
}
要在启动时初始化度量,请使用渴望绑定
使用@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();

谢谢事实上,这就是我昨天所做的,我将发布我的解决方案(Java)作为一个单独的答案。欢迎大家。Java解决方案做得很好。享受游戏。