Skip to content

Commit 396bd86

Browse files
committed
Fix non-default candidate DataSources are not included in metrics
See spring-projects#43481 (comment) Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
1 parent 1710ff4 commit 396bd86

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

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

+6-3
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
* {@link DataSource datasources}.
5555
*
5656
* @author Stephane Nicoll
57+
* @author Yanming Zhou
5758
* @since 2.0.0
5859
*/
5960
@AutoConfiguration(after = { MetricsAutoConfiguration.class, DataSourceAutoConfiguration.class,
@@ -90,7 +91,9 @@ static class DataSourcePoolMetadataMeterBinder implements MeterBinder {
9091

9192
@Override
9293
public void bindTo(MeterRegistry registry) {
93-
List<DataSourcePoolMetadataProvider> metadataProvidersList = this.metadataProviders.stream().toList();
94+
List<DataSourcePoolMetadataProvider> metadataProvidersList = this.metadataProviders
95+
.stream(ObjectProvider.UNFILTERED)
96+
.toList();
9497
this.dataSources.forEach((name, dataSource) -> bindDataSourceToRegistry(name, dataSource,
9598
metadataProvidersList, registry));
9699
}
@@ -140,13 +143,13 @@ static class HikariDataSourceMeterBinder implements MeterBinder {
140143

141144
@Override
142145
public void bindTo(MeterRegistry registry) {
143-
for (DataSource dataSource : this.dataSources) {
146+
this.dataSources.stream(ObjectProvider.UNFILTERED).forEach((dataSource) -> {
144147
HikariDataSource hikariDataSource = DataSourceUnwrapper.unwrap(dataSource, HikariConfigMXBean.class,
145148
HikariDataSource.class);
146149
if (hikariDataSource != null) {
147150
bindMetricsRegistryToHikariDataSource(hikariDataSource, registry);
148151
}
149-
}
152+
});
150153
}
151154

152155
private void bindMetricsRegistryToHikariDataSource(HikariDataSource hikari, MeterRegistry registry) {

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

+25
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
* @author Stephane Nicoll
5252
* @author Andy Wilkinson
5353
* @author Tommy Ludwig
54+
* @author Yanming Zhou
5455
*/
5556
class DataSourcePoolMetricsAutoConfigurationTests {
5657

@@ -219,6 +220,20 @@ void hikariDataSourceIsInstrumentedWithoutMetadataProvider() {
219220
});
220221
}
221222

223+
@Test
224+
void nonDefaultHikariDataSourcesCanBeInstrumented() {
225+
this.contextRunner.withUserConfiguration(NonDefaultHikariDataSourceConfiguration.class)
226+
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
227+
.run((context) -> {
228+
assertThat(context).getBeanNames(DataSource.class)
229+
.containsExactlyInAnyOrder("dataSource", "nonDefaultHikariDataSource");
230+
context.getBean("nonDefaultHikariDataSource", DataSource.class).getConnection();
231+
MeterRegistry registry = context.getBean(MeterRegistry.class);
232+
assertThat(registry.get("hikaricp.connections").meter().getId().getTags())
233+
.containsExactly(Tag.of("pool", "nonDefaultHikariDataSource"));
234+
});
235+
}
236+
222237
private static HikariDataSource createHikariDataSource(String poolName) {
223238
String url = "jdbc:hsqldb:mem:test-" + UUID.randomUUID();
224239
HikariDataSource hikariDataSource = DataSourceBuilder.create().url(url).type(HikariDataSource.class).build();
@@ -271,6 +286,16 @@ DataSource secondOne() {
271286

272287
}
273288

289+
@Configuration(proxyBeanMethods = false)
290+
static class NonDefaultHikariDataSourceConfiguration {
291+
292+
@Bean(defaultCandidate = false)
293+
DataSource nonDefaultHikariDataSource() {
294+
return createHikariDataSource("nonDefaultHikariDataSource");
295+
}
296+
297+
}
298+
274299
@Configuration(proxyBeanMethods = false)
275300
static class ProxiedHikariDataSourcesConfiguration {
276301

0 commit comments

Comments
 (0)