commit
4c097b9841
|
@ -54,6 +54,7 @@ import org.springframework.util.StringUtils;
|
||||||
* {@link DataSource datasources}.
|
* {@link DataSource datasources}.
|
||||||
*
|
*
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
|
* @author Yanming Zhou
|
||||||
* @since 2.0.0
|
* @since 2.0.0
|
||||||
*/
|
*/
|
||||||
@AutoConfiguration(after = { MetricsAutoConfiguration.class, DataSourceAutoConfiguration.class,
|
@AutoConfiguration(after = { MetricsAutoConfiguration.class, DataSourceAutoConfiguration.class,
|
||||||
|
@ -140,13 +141,13 @@ public class DataSourcePoolMetricsAutoConfiguration {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bindTo(MeterRegistry registry) {
|
public void bindTo(MeterRegistry registry) {
|
||||||
for (DataSource dataSource : this.dataSources) {
|
this.dataSources.stream(ObjectProvider.UNFILTERED).forEach((dataSource) -> {
|
||||||
HikariDataSource hikariDataSource = DataSourceUnwrapper.unwrap(dataSource, HikariConfigMXBean.class,
|
HikariDataSource hikariDataSource = DataSourceUnwrapper.unwrap(dataSource, HikariConfigMXBean.class,
|
||||||
HikariDataSource.class);
|
HikariDataSource.class);
|
||||||
if (hikariDataSource != null) {
|
if (hikariDataSource != null) {
|
||||||
bindMetricsRegistryToHikariDataSource(hikariDataSource, registry);
|
bindMetricsRegistryToHikariDataSource(hikariDataSource, registry);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindMetricsRegistryToHikariDataSource(HikariDataSource hikari, MeterRegistry registry) {
|
private void bindMetricsRegistryToHikariDataSource(HikariDataSource hikari, MeterRegistry registry) {
|
||||||
|
|
|
@ -51,6 +51,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
* @author Andy Wilkinson
|
* @author Andy Wilkinson
|
||||||
* @author Tommy Ludwig
|
* @author Tommy Ludwig
|
||||||
|
* @author Yanming Zhou
|
||||||
*/
|
*/
|
||||||
class DataSourcePoolMetricsAutoConfigurationTests {
|
class DataSourcePoolMetricsAutoConfigurationTests {
|
||||||
|
|
||||||
|
@ -156,14 +157,15 @@ class DataSourcePoolMetricsAutoConfigurationTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void allHikariDataSourcesCanBeInstrumented() {
|
void allHikariDataSourcesCanBeInstrumented() {
|
||||||
this.contextRunner.withUserConfiguration(TwoHikariDataSourcesConfiguration.class)
|
this.contextRunner.withUserConfiguration(MultipleHikariDataSourcesConfiguration.class)
|
||||||
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
|
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
|
||||||
.run((context) -> {
|
.run((context) -> {
|
||||||
context.getBean("firstDataSource", DataSource.class).getConnection();
|
context.getBean("standardDataSource", DataSource.class).getConnection();
|
||||||
context.getBean("secondOne", DataSource.class).getConnection();
|
context.getBean("nonDefault", DataSource.class).getConnection();
|
||||||
|
context.getBean("nonAutowire", DataSource.class).getConnection();
|
||||||
MeterRegistry registry = context.getBean(MeterRegistry.class);
|
MeterRegistry registry = context.getBean(MeterRegistry.class);
|
||||||
registry.get("hikaricp.connections").tags("pool", "firstDataSource").meter();
|
assertThat(registry.find("hikaricp.connections").meters()).map((meter) -> meter.getId().getTag("pool"))
|
||||||
registry.get("hikaricp.connections").tags("pool", "secondOne").meter();
|
.containsOnly("standardDataSource", "nonDefault");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,16 +184,17 @@ class DataSourcePoolMetricsAutoConfigurationTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void allHikariDataSourcesCanBeInstrumentedWhenUsingLazyInitialization() {
|
void allHikariDataSourcesCanBeInstrumentedWhenUsingLazyInitialization() {
|
||||||
this.contextRunner.withUserConfiguration(TwoHikariDataSourcesConfiguration.class)
|
this.contextRunner.withUserConfiguration(MultipleHikariDataSourcesConfiguration.class)
|
||||||
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
|
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
|
||||||
.withInitializer(
|
.withInitializer(
|
||||||
(context) -> context.addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor()))
|
(context) -> context.addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor()))
|
||||||
.run((context) -> {
|
.run((context) -> {
|
||||||
context.getBean("firstDataSource", DataSource.class).getConnection();
|
context.getBean("standardDataSource", DataSource.class).getConnection();
|
||||||
context.getBean("secondOne", DataSource.class).getConnection();
|
context.getBean("nonDefault", DataSource.class).getConnection();
|
||||||
|
context.getBean("nonAutowire", DataSource.class).getConnection();
|
||||||
MeterRegistry registry = context.getBean(MeterRegistry.class);
|
MeterRegistry registry = context.getBean(MeterRegistry.class);
|
||||||
registry.get("hikaricp.connections").tags("pool", "firstDataSource").meter();
|
assertThat(registry.find("hikaricp.connections").meters()).map((meter) -> meter.getId().getTag("pool"))
|
||||||
registry.get("hikaricp.connections").tags("pool", "secondOne").meter();
|
.containsOnly("standardDataSource", "nonDefault");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,16 +260,21 @@ class DataSourcePoolMetricsAutoConfigurationTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
static class TwoHikariDataSourcesConfiguration {
|
static class MultipleHikariDataSourcesConfiguration {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
DataSource firstDataSource() {
|
DataSource standardDataSource() {
|
||||||
return createHikariDataSource("firstDataSource");
|
return createHikariDataSource("standardDataSource");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean(defaultCandidate = false)
|
||||||
DataSource secondOne() {
|
DataSource nonDefault() {
|
||||||
return createHikariDataSource("secondOne");
|
return createHikariDataSource("nonDefault");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(autowireCandidate = false)
|
||||||
|
DataSource nonAutowire() {
|
||||||
|
return createHikariDataSource("nonAutowire");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue