2016-03-31 11 views

Antwort

2

können Sie die HikaryDatasource zugreifen

@Singleton 
class InitMetricRegistry @Inject() (@NamedDatabaseProvider("default") val defaultDB: Database){ 
    val ds: HikariDataSource = defaultDB.dataSource.asInstanceOf[HikariDataSource] 
    ds.setMetricRegistry(???) 
} 

mit den Metriken beim Start eine eifrige Bindung https://www.playframework.com/documentation/2.5.x/ScalaDependencyInjection#Eager-bindings

+1

Danke. In der Tat, das ist, was ich gestern getan habe, werde ich meine Lösung (in Java) als eine separate Antwort veröffentlichen. – bravo2

+0

Gern geschehen. Gute Arbeit mit der Java-Lösung. Viel Spaß beim Spielen. –

2

verwenden Gelöst dies den von @JonasAnso erwähnte gleichen Ansatz zu initialisieren. Hier ist das Java-Snippet.

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 wird dann als ein eifriger Singleton von benutzerdefinierten Guice-Modul gebunden.

MetricRegistry metrics = new MetricRegistry(); 
// configure MetricsRegistry ... 
bind(MetricRegistry.class).toInstance(metrics); 
// bind app startup 
bind(AppInitProcessor.class).asEagerSingleton(); 
Verwandte Themen