How do I configure HikariCP and Dropwizard/Coda-Hale metrics in Spring Boot application

Kevin M picture Kevin M · Feb 19, 2015 · Viewed 12.7k times · Source

Reading the instructions on the HikariCP wiki about how to enable the Dropwizard metrics, it says to just configure a MetricsRegistry instance in HikariConfig or HikariDatasource.

Problem is, in Spring Boot, all the configuration is handled by autoconfiguration so I'm not manually configuring the HikariCP pool at all.

Any instructions on how to do this? Do I have to completely override the autoconfiguration by defining my own bean and setting all the settings in a @Configuration file?

Answer

Kevin M picture Kevin M · Feb 19, 2015

So I was able to figure this out by manually configuring HikariCP in a java configuration file. That allowed me to get a reference to the Spring Boot MetricRegistry, which I could then set in HikariConfig. Here's my configuration class:

@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);
    }
}