diff --git a/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.java b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.java index a3405a9c29..c343e5a4a7 100644 --- a/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.java +++ b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.java @@ -18,6 +18,9 @@ package com.alibaba.druid.spring.boot.autoconfigure; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -59,4 +62,21 @@ public class DruidDataSourceAutoConfigure { return dataSource; } + + /** + * Register the {@link DataSourcePoolMetadataProvider} instances to support DataSource metrics. + * @see DataSourcePoolMetadataProvidersConfiguration + */ + @Bean + public DataSourcePoolMetadataProvider druidDataSourcePoolMetadataProvider() { + return new DataSourcePoolMetadataProvider() { + @Override + public DataSourcePoolMetadata getDataSourcePoolMetadata(DataSource dataSource) { + if (dataSource instanceof DruidDataSource) { + return new DruidDataSourcePoolMetadata((DruidDataSource)dataSource); + } + return null; + } + }; + } } diff --git a/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourcePoolMetadata.java b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourcePoolMetadata.java new file mode 100644 index 0000000000..f890f1e468 --- /dev/null +++ b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourcePoolMetadata.java @@ -0,0 +1,41 @@ +package com.alibaba.druid.spring.boot.autoconfigure; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.boot.autoconfigure.jdbc.metadata.AbstractDataSourcePoolMetadata; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; + +/** + * {@link DataSourcePoolMetadata} for a Druid DataSource. + * + * @author lihengming [89921218@qq.com] + */ +public class DruidDataSourcePoolMetadata extends AbstractDataSourcePoolMetadata { + /** + * Create an instance with the data source to use. + * + * @param dataSource the data source + */ + public DruidDataSourcePoolMetadata(DruidDataSource dataSource) { + super(dataSource); + } + + @Override + public Integer getActive() { + return getDataSource().getActiveCount(); + } + + @Override + public Integer getMax() { + return getDataSource().getMaxActive(); + } + + @Override + public Integer getMin() { + return getDataSource().getMinIdle(); + } + + @Override + public String getValidationQuery() { + return getDataSource().getValidationQuery(); + } +}