Play 2.5 中使用的 HikariCP 数据库连接池支持 Dropwizard Metrics。推荐的方法是使用HikariConfig.setMetricRegistry(MetricRegistry)
,但 Play 似乎没有为 HikariConfig 使用依赖注入。是否有其他选项可以在 Play HikariCP 上设置 MetricRegistry?
问问题
1074 次
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 回答