Java 如何在Spring Boot应用程序中配置HikariCP和Dropwizard/Coda Hale指标
在HikaricpWiki上阅读关于如何启用Dropwizard度量的内容时,它说只需在Java 如何在Spring Boot应用程序中配置HikariCP和Dropwizard/Coda Hale指标,java,spring-boot,connection-pooling,hikaricp,codahale-metrics,Java,Spring Boot,Connection Pooling,Hikaricp,Codahale Metrics,在HikaricpWiki上阅读关于如何启用Dropwizard度量的内容时,它说只需在HikariConfig或HikariDatasource中配置MetricsRegistry实例 问题是,在Spring引导中,所有配置都由自动配置处理,所以我根本不需要手动配置HikariCP池 有关于如何操作的说明吗?我是否必须通过定义自己的bean并在@Configuration文件中设置所有设置来完全覆盖自动配置 所以我可以通过在java配置文件中手动配置HikariCP来解决这个问题。这使我能够获
HikariConfig
或HikariDatasource
中配置MetricsRegistry
实例
问题是,在Spring引导中,所有配置都由自动配置处理,所以我根本不需要手动配置HikariCP池
有关于如何操作的说明吗?我是否必须通过定义自己的bean并在
@Configuration
文件中设置所有设置来完全覆盖自动配置 所以我可以通过在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);
}
}
或者让Spring Boot配置您的数据源,@Autowire在@Configuration/@springboot应用程序类中连接数据源和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:池的配置在启动后即被密封。使用HikariConfigMXBean进行运行时更改。”