【问题标题】:How do I configure HikariCP and Dropwizard/Coda-Hale metrics in Spring Boot application如何在 Spring Boot 应用程序中配置 HikariCP 和 Dropwizard/Coda-Hale 指标
【发布时间】:2015-02-19 19:29:34
【问题描述】:

在 HikariCP wiki 上阅读 the instructions 关于如何启用 Dropwizard 指标,它说只需在 HikariConfigHikariDatasource 中配置一个 MetricsRegistry 实例。

问题是,在 Spring Boot 中,所有配置都由自动配置处理,所以我根本没有手动配置 HikariCP 池。

有关如何执行此操作的任何说明?我是否必须通过定义自己的 bean 并在@Configuration 文件中设置所有设置来完全覆盖自动配置?

【问题讨论】:

    标签: java spring-boot connection-pooling hikaricp codahale-metrics


    【解决方案1】:

    或者让 Spring Boot 配置你的数据源,@Autowire 你的 @Configuration/@SpringBootApplication 类中的 DataSource 和 MetricRegistry 并将它们连接到一个 @PostConstruct 中:

    @Autowired
    private DataSource dataSource;
    
    @Autowired
    private MetricRegistry metricRegistry;
    
    
    @PostConstruct
    public void setUpHikariWithMetrics() {
        if(dataSource instanceof HikariDataSource) {
            ((HikariDataSource) dataSource).setMetricRegistry(metricRegistry);
        }
    }
    

    【讨论】:

    • 我认为这更好,保持其他所有内容不变,最后插入指标。不错的答案!
    • 当我尝试这个时,我得到“java.lang.IllegalStateException: The configuration is seal once started. Use HikariConfigMXBean for runtime changes.”
    【解决方案2】:

    所以我可以通过在 java 配置文件中手动配置 HikariCP 来解决这个问题。这使我能够获得对 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);
        }
    }
    

    【讨论】:

      最近更新 更多