8

Leggendo le istruzioni sul wiki HikariCP su come abilitare le metriche Dropwizard, si dice di configurare semplicemente un'istanza MetricsRegistry in HikariConfig o HikariDatasource. Il problema è che, in Spring Boot, tutta la configurazione è gestita da autoconfigurazione, quindi non sto configurando manualmente il pool HikariCP. Qualche istruzione su come fare questo? Devo sovrascrivere completamente l'autoconfigurazione definendo il mio bean e impostando tutte le impostazioni in un file @Configuration?Come configurare le metriche HikariCP e Dropwizard/Coda-Hale nell'applicazione Spring Boot

risposta

8

Quindi sono riuscito a capirlo configurando manualmente HikariCP in un file di configurazione java. Questo mi ha permesso di ottenere un riferimento a Spring Boot MetricRegistry, che ho potuto quindi impostare in HikariConfig. Ecco la mia classe di configurazione:

@Configuration 
public class DatasourceConfiguration { 

    @Value("${spring.datasource.username}") 
    private String user; 

    @Value("${spring.datasource.password}") 
    private String password; 

    @Value("${spring.datasource.url}") 
    private String dataSourceUrl; 

    @Value("${spring.datasource.driverClassName}") 
    private String driverClassName; 

    @Value("${spring.datasource.connectionTestQuery}") 
    private String connectionTestQuery; 

    @Autowired 
    private MetricRegistry metricRegistry; 

    @Bean 
    public DataSource primaryDataSource() { 
     Properties dsProps = new Properties(); 
     dsProps.setProperty("url", dataSourceUrl); 
     dsProps.setProperty("user", user); 
     dsProps.setProperty("password", password); 

     Properties configProps = new Properties(); 
     configProps.setProperty("connectionTestQuery", connectionTestQuery); 
     configProps.setProperty("driverClassName", driverClassName); 
     configProps.setProperty("jdbcUrl", dataSourceUrl); 

     HikariConfig hc = new HikariConfig(configProps); 
     hc.setDataSourceProperties(dsProps); 
     hc.setMetricRegistry(metricRegistry); 
     return new HikariDataSource(hc); 
    } 
} 
7

O lasciare Primavera Boot configurare l'origine dati, @Autowire il DataSource e MetricRegistry nel vostro @ Configurazione/@ classe SpringBootApplication e cablare insieme in un @PostConstruct:

@Autowired 
private DataSource dataSource; 

@Autowired 
private MetricRegistry metricRegistry; 


@PostConstruct 
public void setUpHikariWithMetrics() { 
    if(dataSource instanceof HikariDataSource) { 
     ((HikariDataSource) dataSource).setMetricRegistry(metricRegistry); 
    } 
} 
+0

Questo è meglio credo, mantenere tutto il resto intatto e collegare le metriche alla fine. Bella risposta! –

+0

Quando provo, ottengo "java.lang.IllegalStateException: la configurazione del pool è sigillata una volta avviata. Utilizza HikariConfigMXBean per le modifiche di runtime." –