Skip to content

Commit 5f0ac46

Browse files
committed
Unwrap DataSource target rather than plain instanceof calls
Closes gh-15227
1 parent 8cdbbdd commit 5f0ac46

File tree

2 files changed

+16
-20
lines changed

2 files changed

+16
-20
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceJmxConfiguration.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,22 +63,14 @@ static class Hikari {
6363

6464
@PostConstruct
6565
public void validateMBeans() {
66-
HikariDataSource hikariDataSource = unwrapHikariDataSource();
66+
HikariDataSource hikariDataSource = DataSourceUnwrapper
67+
.unwrap(this.dataSource, HikariDataSource.class);
6768
if (hikariDataSource != null && hikariDataSource.isRegisterMbeans()) {
6869
this.mBeanExporter
6970
.ifUnique((exporter) -> exporter.addExcludedBean("dataSource"));
7071
}
7172
}
7273

73-
private HikariDataSource unwrapHikariDataSource() {
74-
try {
75-
return this.dataSource.unwrap(HikariDataSource.class);
76-
}
77-
catch (SQLException ex) {
78-
return null;
79-
}
80-
}
81-
8274
}
8375

8476
@Configuration

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2017 the original author or authors.
2+
* Copyright 2012-2018 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@
2020
import org.apache.commons.dbcp2.BasicDataSource;
2121

2222
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
23+
import org.springframework.boot.jdbc.DataSourceUnwrapper;
2324
import org.springframework.boot.jdbc.metadata.CommonsDbcp2DataSourcePoolMetadata;
2425
import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider;
2526
import org.springframework.boot.jdbc.metadata.HikariDataSourcePoolMetadata;
@@ -44,9 +45,10 @@ static class TomcatDataSourcePoolMetadataProviderConfiguration {
4445
@Bean
4546
public DataSourcePoolMetadataProvider tomcatPoolDataSourceMetadataProvider() {
4647
return (dataSource) -> {
47-
if (dataSource instanceof org.apache.tomcat.jdbc.pool.DataSource) {
48-
return new TomcatDataSourcePoolMetadata(
49-
(org.apache.tomcat.jdbc.pool.DataSource) dataSource);
48+
org.apache.tomcat.jdbc.pool.DataSource tomcatDataSource = DataSourceUnwrapper
49+
.unwrap(dataSource, org.apache.tomcat.jdbc.pool.DataSource.class);
50+
if (tomcatDataSource != null) {
51+
return new TomcatDataSourcePoolMetadata(tomcatDataSource);
5052
}
5153
return null;
5254
};
@@ -61,9 +63,10 @@ static class HikariPoolDataSourceMetadataProviderConfiguration {
6163
@Bean
6264
public DataSourcePoolMetadataProvider hikariPoolDataSourceMetadataProvider() {
6365
return (dataSource) -> {
64-
if (dataSource instanceof HikariDataSource) {
65-
return new HikariDataSourcePoolMetadata(
66-
(HikariDataSource) dataSource);
66+
HikariDataSource hikariDataSource = DataSourceUnwrapper.unwrap(dataSource,
67+
HikariDataSource.class);
68+
if (hikariDataSource != null) {
69+
return new HikariDataSourcePoolMetadata(hikariDataSource);
6770
}
6871
return null;
6972
};
@@ -78,9 +81,10 @@ static class CommonsDbcp2PoolDataSourceMetadataProviderConfiguration {
7881
@Bean
7982
public DataSourcePoolMetadataProvider commonsDbcp2PoolDataSourceMetadataProvider() {
8083
return (dataSource) -> {
81-
if (dataSource instanceof BasicDataSource) {
82-
return new CommonsDbcp2DataSourcePoolMetadata(
83-
(BasicDataSource) dataSource);
84+
BasicDataSource dbcpDataSource = DataSourceUnwrapper.unwrap(dataSource,
85+
BasicDataSource.class);
86+
if (dbcpDataSource != null) {
87+
return new CommonsDbcp2DataSourcePoolMetadata(dbcpDataSource);
8488
}
8589
return null;
8690
};

0 commit comments

Comments
 (0)