Browse Source

Merge branch '3.4.x'

Closes gh-44257
pull/44267/head
Andy Wilkinson 12 months ago
parent
commit
4c097b9841
  1. 5
      spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration.java
  2. 40
      spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfigurationTests.java

5
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration.java

@ -54,6 +54,7 @@ import org.springframework.util.StringUtils; @@ -54,6 +54,7 @@ import org.springframework.util.StringUtils;
* {@link DataSource datasources}.
*
* @author Stephane Nicoll
* @author Yanming Zhou
* @since 2.0.0
*/
@AutoConfiguration(after = { MetricsAutoConfiguration.class, DataSourceAutoConfiguration.class,
@ -140,13 +141,13 @@ public class DataSourcePoolMetricsAutoConfiguration { @@ -140,13 +141,13 @@ public class DataSourcePoolMetricsAutoConfiguration {
@Override
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.class);
if (hikariDataSource != null) {
bindMetricsRegistryToHikariDataSource(hikariDataSource, registry);
}
}
});
}
private void bindMetricsRegistryToHikariDataSource(HikariDataSource hikari, MeterRegistry registry) {

40
spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfigurationTests.java

@ -51,6 +51,7 @@ import static org.assertj.core.api.Assertions.assertThat; @@ -51,6 +51,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Stephane Nicoll
* @author Andy Wilkinson
* @author Tommy Ludwig
* @author Yanming Zhou
*/
class DataSourcePoolMetricsAutoConfigurationTests {
@ -156,14 +157,15 @@ class DataSourcePoolMetricsAutoConfigurationTests { @@ -156,14 +157,15 @@ class DataSourcePoolMetricsAutoConfigurationTests {
@Test
void allHikariDataSourcesCanBeInstrumented() {
this.contextRunner.withUserConfiguration(TwoHikariDataSourcesConfiguration.class)
this.contextRunner.withUserConfiguration(MultipleHikariDataSourcesConfiguration.class)
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
.run((context) -> {
context.getBean("firstDataSource", DataSource.class).getConnection();
context.getBean("secondOne", DataSource.class).getConnection();
context.getBean("standardDataSource", DataSource.class).getConnection();
context.getBean("nonDefault", DataSource.class).getConnection();
context.getBean("nonAutowire", DataSource.class).getConnection();
MeterRegistry registry = context.getBean(MeterRegistry.class);
registry.get("hikaricp.connections").tags("pool", "firstDataSource").meter();
registry.get("hikaricp.connections").tags("pool", "secondOne").meter();
assertThat(registry.find("hikaricp.connections").meters()).map((meter) -> meter.getId().getTag("pool"))
.containsOnly("standardDataSource", "nonDefault");
});
}
@ -182,16 +184,17 @@ class DataSourcePoolMetricsAutoConfigurationTests { @@ -182,16 +184,17 @@ class DataSourcePoolMetricsAutoConfigurationTests {
@Test
void allHikariDataSourcesCanBeInstrumentedWhenUsingLazyInitialization() {
this.contextRunner.withUserConfiguration(TwoHikariDataSourcesConfiguration.class)
this.contextRunner.withUserConfiguration(MultipleHikariDataSourcesConfiguration.class)
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
.withInitializer(
(context) -> context.addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor()))
.run((context) -> {
context.getBean("firstDataSource", DataSource.class).getConnection();
context.getBean("secondOne", DataSource.class).getConnection();
context.getBean("standardDataSource", DataSource.class).getConnection();
context.getBean("nonDefault", DataSource.class).getConnection();
context.getBean("nonAutowire", DataSource.class).getConnection();
MeterRegistry registry = context.getBean(MeterRegistry.class);
registry.get("hikaricp.connections").tags("pool", "firstDataSource").meter();
registry.get("hikaricp.connections").tags("pool", "secondOne").meter();
assertThat(registry.find("hikaricp.connections").meters()).map((meter) -> meter.getId().getTag("pool"))
.containsOnly("standardDataSource", "nonDefault");
});
}
@ -257,16 +260,21 @@ class DataSourcePoolMetricsAutoConfigurationTests { @@ -257,16 +260,21 @@ class DataSourcePoolMetricsAutoConfigurationTests {
}
@Configuration(proxyBeanMethods = false)
static class TwoHikariDataSourcesConfiguration {
static class MultipleHikariDataSourcesConfiguration {
@Bean
DataSource firstDataSource() {
return createHikariDataSource("firstDataSource");
DataSource standardDataSource() {
return createHikariDataSource("standardDataSource");
}
@Bean
DataSource secondOne() {
return createHikariDataSource("secondOne");
@Bean(defaultCandidate = false)
DataSource nonDefault() {
return createHikariDataSource("nonDefault");
}
@Bean(autowireCandidate = false)
DataSource nonAutowire() {
return createHikariDataSource("nonAutowire");
}
}

Loading…
Cancel
Save