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