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
8
A
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);
}
}
Questo è meglio credo, mantenere tutto il resto intatto e collegare le metriche alla fine. Bella risposta! –
Quando provo, ottengo "java.lang.IllegalStateException: la configurazione del pool è sigillata una volta avviata. Utilizza HikariConfigMXBean per le modifiche di runtime." –