Skip to content

Commit d5ef886

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 d5ef886

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

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

+3-2
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,
@@ -140,13 +141,13 @@ static class HikariDataSourceMeterBinder implements MeterBinder {
140141

141142
@Override
142143
public void bindTo(MeterRegistry registry) {
143-
for (DataSource dataSource : this.dataSources) {
144+
this.dataSources.stream(ObjectProvider.UNFILTERED).forEach((dataSource) -> {
144145
HikariDataSource hikariDataSource = DataSourceUnwrapper.unwrap(dataSource, HikariConfigMXBean.class,
145146
HikariDataSource.class);
146147
if (hikariDataSource != null) {
147148
bindMetricsRegistryToHikariDataSource(hikariDataSource, registry);
148149
}
149-
}
150+
});
150151
}
151152

152153
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)