Как настроить метрики HikariCP и Dropwizard / Coda-Hale в приложении Spring Boot

При чтении инструкций вики HikariCP о том, как включить метрики Dropwizard, говорится, что чтобы просто настроить экземпляр MetricsRegistry в HikariConfig или HikariDatasource.

Проблема в том, что в Spring Boot вся конфигурация обрабатывается автоконфигурацией, поэтому я вообще не настраиваю пул HikariCP вручную.

Есть инструкции, как это сделать? Должен ли я полностью переопределить автоконфигурацию, определив свой собственный компонент и установив все параметры в файле @Configuration?


person Kevin M    schedule 19.02.2015    source источник


Ответы (2)


Или позвольте Spring Boot настроить ваш источник данных, @Autowire, DataSource и MetricRegistry в вашем классе @ Configuration / @ SpringBootApplication и соедините их вместе в @PostConstruct:

@Autowired
private DataSource dataSource;

@Autowired
private MetricRegistry metricRegistry;


@PostConstruct
public void setUpHikariWithMetrics() {
    if(dataSource instanceof HikariDataSource) {
        ((HikariDataSource) dataSource).setMetricRegistry(metricRegistry);
    }
}
person Svante    schedule 17.02.2017
comment
Я считаю, что это лучше, оставьте все остальное нетронутым и в конце включите метрики. Хороший ответ! - person ameenhere; 13.09.2017
comment
Когда я пытаюсь это сделать, я получаю java.lang.IllegalStateException: конфигурация пула запечатывается после запуска. Используйте HikariConfigMXBean для изменений во время выполнения. - person Paŭlo Ebermann; 23.02.2018

Итак, я смог выяснить это, вручную настроив HikariCP в файле конфигурации java. Это позволило мне получить ссылку на Spring Boot MetricRegistry, которую я затем мог установить в HikariConfig. Вот мой класс конфигурации:

@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);
    }
}
person Kevin M    schedule 19.02.2015