From adbded33ff2ec7e9c7af6e2d8501fe4039248a41 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 1 Sep 2014 09:20:05 -0700 Subject: [PATCH 1/8] Apply eclipse formatting rules to 3dc932db --- .../MetricDataSourceAutoConfiguration.java | 4 +- .../endpoint/DataSourcePublicMetrics.java | 39 ++++++++------ ...etricDataSourceAutoConfigurationTests.java | 54 +++++++++---------- .../jdbc/AbstractDataSourceMetadata.java | 5 +- .../jdbc/CommonsDbcpDataSourceMetadata.java | 7 +-- .../CompositeDataSourceMetadataProvider.java | 8 +-- .../jdbc/DataSourceMetadata.java | 38 ++++++------- .../jdbc/DataSourceMetadataProvider.java | 5 +- ...aSourceMetadataProvidersConfiguration.java | 17 +++--- .../jdbc/HikariDataSourceMetadata.java | 24 ++++----- .../jdbc/TomcatDataSourceMetadata.java | 4 +- .../jdbc/AbstractDataSourceMetadataTests.java | 39 ++++++++------ .../CommonsDbcpDataSourceMetadataTests.java | 21 +++++--- ...positeDataSourceMetadataProviderTests.java | 34 ++++++------ .../jdbc/HikariDataSourceMetadataTests.java | 14 +++-- .../jdbc/TomcatDataSourceMetadataTests.java | 10 ++-- 16 files changed, 174 insertions(+), 149 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfiguration.java index 3aa10bd868..0d2289ccaf 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfiguration.java @@ -30,8 +30,8 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; /** - * {@link EnableAutoConfiguration Auto-configuration} that provides - * metrics on dataSource usage. + * {@link EnableAutoConfiguration Auto-configuration} that provides metrics on dataSource + * usage. * * @author Stephane Nicoll * @since 1.2.0 diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java index 7d57158ad1..5511c441c1 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Map; + import javax.annotation.PostConstruct; import javax.sql.DataSource; @@ -33,8 +34,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Primary; /** - * A {@link PublicMetrics} implementation that provides data source usage - * statistics. + * A {@link PublicMetrics} implementation that provides data source usage statistics. * * @author Stephane Nicoll * @since 1.2.0 @@ -49,21 +49,23 @@ public class DataSourcePublicMetrics implements PublicMetrics { @Autowired private Collection dataSourceMetadataProviders; - private final Map dataSourceMetadataByPrefix - = new HashMap(); + private final Map dataSourceMetadataByPrefix = new HashMap(); @PostConstruct public void initialize() { - Map dataSources = this.applicationContext.getBeansOfType(DataSource.class); + Map dataSources = this.applicationContext + .getBeansOfType(DataSource.class); DataSource primaryDataSource = getPrimaryDataSource(); - - DataSourceMetadataProvider provider = new CompositeDataSourceMetadataProvider(this.dataSourceMetadataProviders); + DataSourceMetadataProvider provider = new CompositeDataSourceMetadataProvider( + this.dataSourceMetadataProviders); for (Map.Entry entry : dataSources.entrySet()) { - String prefix = createPrefix(entry.getKey(), entry.getValue(), entry.getValue().equals(primaryDataSource)); - DataSourceMetadata dataSourceMetadata = provider.getDataSourceMetadata(entry.getValue()); + String prefix = createPrefix(entry.getKey(), entry.getValue(), entry + .getValue().equals(primaryDataSource)); + DataSourceMetadata dataSourceMetadata = provider.getDataSourceMetadata(entry + .getValue()); if (dataSourceMetadata != null) { - dataSourceMetadataByPrefix.put(prefix, dataSourceMetadata); + this.dataSourceMetadataByPrefix.put(prefix, dataSourceMetadata); } } } @@ -71,7 +73,8 @@ public class DataSourcePublicMetrics implements PublicMetrics { @Override public Collection> metrics() { Collection> result = new LinkedHashSet>(); - for (Map.Entry entry : dataSourceMetadataByPrefix.entrySet()) { + for (Map.Entry entry : this.dataSourceMetadataByPrefix + .entrySet()) { String prefix = entry.getKey(); // Make sure the prefix ends with a dot if (!prefix.endsWith(".")) { @@ -91,19 +94,23 @@ public class DataSourcePublicMetrics implements PublicMetrics { } /** - * Create the prefix to use for the metrics to associate with the given {@link DataSource}. + * Create the prefix to use for the metrics to associate with the given + * {@link DataSource}. * @param dataSourceName the name of the data source bean * @param dataSource the data source to configure * @param primary if this data source is the primary data source * @return a prefix for the given data source */ - protected String createPrefix(String dataSourceName, DataSource dataSource, boolean primary) { + protected String createPrefix(String dataSourceName, DataSource dataSource, + boolean primary) { StringBuilder sb = new StringBuilder("datasource."); if (primary) { sb.append("primary"); } - else if (endWithDataSource(dataSourceName)) { // Strip the data source part out of the name - sb.append(dataSourceName.substring(0, dataSourceName.length() - DATASOURCE_SUFFIX.length())); + else if (endWithDataSource(dataSourceName)) { // Strip the data source part out of + // the name + sb.append(dataSourceName.substring(0, dataSourceName.length() + - DATASOURCE_SUFFIX.length())); } else { sb.append(dataSourceName); @@ -131,7 +138,7 @@ public class DataSourcePublicMetrics implements PublicMetrics { */ private DataSource getPrimaryDataSource() { try { - return applicationContext.getBean(DataSource.class); + return this.applicationContext.getBean(DataSource.class); } catch (NoSuchBeanDefinitionException e) { return null; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfigurationTests.java index a9dc552eea..eb981a3207 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfigurationTests.java @@ -16,8 +16,6 @@ package org.springframework.boot.actuate.autoconfigure; -import static org.junit.Assert.*; - import java.sql.Connection; import java.sql.SQLException; import java.util.Collection; @@ -26,11 +24,9 @@ import java.util.Map; import javax.sql.DataSource; -import com.zaxxer.hikari.HikariDataSource; import org.apache.commons.dbcp.BasicDataSource; import org.junit.After; import org.junit.Test; - import org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics; import org.springframework.boot.actuate.endpoint.PublicMetrics; import org.springframework.boot.actuate.metrics.Metric; @@ -44,8 +40,12 @@ import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.ConnectionCallback; import org.springframework.jdbc.core.JdbcTemplate; +import com.zaxxer.hikari.HikariDataSource; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + /** - * * @author Stephane Nicoll */ public class MetricDataSourceAutoConfigurationTests { @@ -78,24 +78,25 @@ public class MetricDataSourceAutoConfigurationTests { load(MultipleDataSourcesConfig.class); PublicMetrics bean = this.context.getBean(PublicMetrics.class); Collection> metrics = bean.metrics(); - assertMetrics(metrics, - "datasource.tomcat.active", "datasource.tomcat.usage", + assertMetrics(metrics, "datasource.tomcat.active", "datasource.tomcat.usage", "datasource.commonsDbcp.active", "datasource.commonsDbcp.usage"); // Hikari won't work unless a first connection has been retrieved - JdbcTemplate jdbcTemplate = new JdbcTemplate(context.getBean("hikariDS", DataSource.class)); + JdbcTemplate jdbcTemplate = new JdbcTemplate(this.context.getBean("hikariDS", + DataSource.class)); jdbcTemplate.execute(new ConnectionCallback() { @Override - public Void doInConnection(Connection connection) throws SQLException, DataAccessException { + public Void doInConnection(Connection connection) throws SQLException, + DataAccessException { return null; } }); Collection> anotherMetrics = bean.metrics(); - assertMetrics(anotherMetrics, - "datasource.tomcat.active", "datasource.tomcat.usage", - "datasource.hikariDS.active", "datasource.hikariDS.usage", - "datasource.commonsDbcp.active", "datasource.commonsDbcp.usage"); + assertMetrics(anotherMetrics, "datasource.tomcat.active", + "datasource.tomcat.usage", "datasource.hikariDS.active", + "datasource.hikariDS.usage", "datasource.commonsDbcp.active", + "datasource.commonsDbcp.usage"); } @Test @@ -103,19 +104,18 @@ public class MetricDataSourceAutoConfigurationTests { load(MultipleDataSourcesWithPrimaryConfig.class); PublicMetrics bean = this.context.getBean(PublicMetrics.class); Collection> metrics = bean.metrics(); - assertMetrics(metrics, - "datasource.primary.active", "datasource.primary.usage", + assertMetrics(metrics, "datasource.primary.active", "datasource.primary.usage", "datasource.commonsDbcp.active", "datasource.commonsDbcp.usage"); } @Test public void customPrefix() { - load(MultipleDataSourcesWithPrimaryConfig.class, CustomDataSourcePublicMetrics.class); + load(MultipleDataSourcesWithPrimaryConfig.class, + CustomDataSourcePublicMetrics.class); PublicMetrics bean = this.context.getBean(PublicMetrics.class); Collection> metrics = bean.metrics(); - assertMetrics(metrics, - "ds.first.active", "ds.first.usage", - "ds.second.active", "ds.second.usage"); + assertMetrics(metrics, "ds.first.active", "ds.first.usage", "ds.second.active", + "ds.second.usage"); } @@ -138,13 +138,13 @@ public class MetricDataSourceAutoConfigurationTests { this.context.refresh(); } - @Configuration static class MultipleDataSourcesConfig { @Bean public DataSource tomcatDataSource() { - return initializeBuilder().type(org.apache.tomcat.jdbc.pool.DataSource.class).build(); + return initializeBuilder().type(org.apache.tomcat.jdbc.pool.DataSource.class) + .build(); } @Bean @@ -164,7 +164,8 @@ public class MetricDataSourceAutoConfigurationTests { @Bean @Primary public DataSource myDataSource() { - return initializeBuilder().type(org.apache.tomcat.jdbc.pool.DataSource.class).build(); + return initializeBuilder().type(org.apache.tomcat.jdbc.pool.DataSource.class) + .build(); } @Bean @@ -180,7 +181,8 @@ public class MetricDataSourceAutoConfigurationTests { public DataSourcePublicMetrics myDataSourcePublicMetrics() { return new DataSourcePublicMetrics() { @Override - protected String createPrefix(String dataSourceName, DataSource dataSource, boolean primary) { + protected String createPrefix(String dataSourceName, + DataSource dataSource, boolean primary) { return (primary ? "ds.first." : "ds.second"); } }; @@ -188,9 +190,7 @@ public class MetricDataSourceAutoConfigurationTests { } private static DataSourceBuilder initializeBuilder() { - return DataSourceBuilder.create() - .driverClassName("org.hsqldb.jdbc.JDBCDriver") - .url("jdbc:hsqldb:mem:test") - .username("sa"); + return DataSourceBuilder.create().driverClassName("org.hsqldb.jdbc.JDBCDriver") + .url("jdbc:hsqldb:mem:test").username("sa"); } } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java index 9adf8267f7..99308f0a21 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java @@ -24,7 +24,8 @@ import javax.sql.DataSource; * @author Stephane Nicoll * @since 1.2.0 */ -public abstract class AbstractDataSourceMetadata implements DataSourceMetadata { +public abstract class AbstractDataSourceMetadata implements + DataSourceMetadata { private final D dataSource; @@ -55,7 +56,7 @@ public abstract class AbstractDataSourceMetadata implement } protected final D getDataSource() { - return dataSource; + return this.dataSource; } } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java index 28343899bf..5042debea5 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java @@ -19,13 +19,13 @@ package org.springframework.boot.autoconfigure.jdbc; import org.apache.commons.dbcp.BasicDataSource; /** - * A {@link DataSourceMetadata} implementation for the commons dbcp - * data source. + * A {@link DataSourceMetadata} implementation for the commons dbcp data source. * * @author Stephane Nicoll * @since 1.2.0 */ -public class CommonsDbcpDataSourceMetadata extends AbstractDataSourceMetadata { +public class CommonsDbcpDataSourceMetadata extends + AbstractDataSourceMetadata { public CommonsDbcpDataSourceMetadata(BasicDataSource dataSource) { super(dataSource); @@ -50,4 +50,5 @@ public class CommonsDbcpDataSourceMetadata extends AbstractDataSourceMetadata providers) { + public CompositeDataSourceMetadataProvider( + Collection providers) { this.providers = providers; } @@ -48,8 +49,9 @@ public class CompositeDataSourceMetadataProvider implements DataSourceMetadataPr @Override public DataSourceMetadata getDataSourceMetadata(DataSource dataSource) { - for (DataSourceMetadataProvider provider : providers) { - DataSourceMetadata dataSourceMetadata = provider.getDataSourceMetadata(dataSource); + for (DataSourceMetadataProvider provider : this.providers) { + DataSourceMetadata dataSourceMetadata = provider + .getDataSourceMetadata(dataSource); if (dataSourceMetadata != null) { return dataSourceMetadata; } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java index af4e9d1912..b42e4b3767 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java @@ -19,9 +19,8 @@ package org.springframework.boot.autoconfigure.jdbc; import javax.sql.DataSource; /** - * Provide various metadata regarding a {@link DataSource} that - * are shared by most data source types but not accessible in a - * standard manner. + * Provide various metadata regarding a {@link DataSource} that are shared by most data + * source types but not accessible in a standard manner. * * @author Stephane Nicoll * @since 1.2.0 @@ -29,44 +28,39 @@ import javax.sql.DataSource; public interface DataSourceMetadata { /** - * Return the usage of the pool as a double value between - * 0 and 1. + * Return the usage of the pool as a double value between 0 and 1. *
    - *
  • 1 means that the maximum number of connections - * have been allocated
  • + *
  • 1 means that the maximum number of connections have been allocated
  • *
  • 0 means that no connection is currently active
  • - *
  • -1 means there is not limit to the number of connections - * that can be allocated
  • + *
  • -1 means there is not limit to the number of connections that can be allocated
  • *
- * This may also return {@code null} if the data source does - * not provide the necessary information to compute the poll usage. + * This may also return {@code null} if the data source does not provide the necessary + * information to compute the poll usage. */ Float getPoolUsage(); /** - * Return the current number of active connections that - * have been allocated from the data source or {@code null} - * if that information is not available. + * Return the current number of active connections that have been allocated from the + * data source or {@code null} if that information is not available. */ Integer getPoolSize(); /** - * Return the maximum number of active connections that can be - * allocated at the same time or {@code -1} if there is no - * limit. Can also return {@code null} if that information is - * not available. + * Return the maximum number of active connections that can be allocated at the same + * time or {@code -1} if there is no limit. Can also return {@code null} if that + * information is not available. */ Integer getMaxPoolSize(); /** - * Return the minimum number of idle connections in the pool - * or {@code null} if that information is not available. + * Return the minimum number of idle connections in the pool or {@code null} if that + * information is not available. */ Integer getMinPoolSize(); /** - * Return the query to use to validate that a connection is - * valid or {@code null} if that information is not available. + * Return the query to use to validate that a connection is valid or {@code null} if + * that information is not available. */ String getValidationQuery(); diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvider.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvider.java index 14b9220478..178667c2d1 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvider.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvider.java @@ -27,9 +27,8 @@ import javax.sql.DataSource; public interface DataSourceMetadataProvider { /** - * Return the {@link DataSourceMetadata} instance able to manage the - * specified {@link DataSource} or {@code null} if the given data - * source could not be handled. + * Return the {@link DataSourceMetadata} instance able to manage the specified + * {@link DataSource} or {@code null} if the given data source could not be handled. */ DataSourceMetadata getDataSourceMetadata(DataSource dataSource); diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvidersConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvidersConfiguration.java index d54a536d7b..ac3cf39482 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvidersConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvidersConfiguration.java @@ -18,16 +18,16 @@ package org.springframework.boot.autoconfigure.jdbc; import javax.sql.DataSource; -import com.zaxxer.hikari.HikariDataSource; import org.apache.commons.dbcp.BasicDataSource; - import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.zaxxer.hikari.HikariDataSource; + /** - * Register the {@link DataSourceMetadataProvider} instances for the supported - * data sources. + * Register the {@link DataSourceMetadataProvider} instances for the supported data + * sources. * * @author Stephane Nicoll * @since 1.2.0 @@ -45,12 +45,14 @@ public class DataSourceMetadataProvidersConfiguration { @Override public DataSourceMetadata getDataSourceMetadata(DataSource dataSource) { if (dataSource instanceof org.apache.tomcat.jdbc.pool.DataSource) { - return new TomcatDataSourceMetadata((org.apache.tomcat.jdbc.pool.DataSource) dataSource); + return new TomcatDataSourceMetadata( + (org.apache.tomcat.jdbc.pool.DataSource) dataSource); } return null; } }; } + } @Configuration @@ -69,6 +71,7 @@ public class DataSourceMetadataProvidersConfiguration { } }; } + } @Configuration @@ -81,12 +84,14 @@ public class DataSourceMetadataProvidersConfiguration { @Override public DataSourceMetadata getDataSourceMetadata(DataSource dataSource) { if (dataSource instanceof BasicDataSource) { - return new CommonsDbcpDataSourceMetadata((BasicDataSource) dataSource); + return new CommonsDbcpDataSourceMetadata( + (BasicDataSource) dataSource); } return null; } }; } + } } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java index cc2500ff1e..02e69d56a6 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java @@ -16,21 +16,20 @@ package org.springframework.boot.autoconfigure.jdbc; -import com.zaxxer.hikari.HikariDataSource; -import com.zaxxer.hikari.pool.HikariPool; - import org.springframework.beans.BeansException; import org.springframework.beans.DirectFieldAccessor; +import com.zaxxer.hikari.HikariDataSource; +import com.zaxxer.hikari.pool.HikariPool; + /** - * A {@link DataSourceMetadata} implementation for the hikari - * data source. + * A {@link DataSourceMetadata} implementation for the hikari data source. * * @author Stephane Nicoll * @since 1.2.0 */ -public class HikariDataSourceMetadata extends AbstractDataSourceMetadata { - +public class HikariDataSourceMetadata extends + AbstractDataSourceMetadata { private final HikariPoolProvider hikariPoolProvider; @@ -41,13 +40,14 @@ public class HikariDataSourceMetadata extends AbstractDataSourceMetadata { @@ -51,10 +49,12 @@ public abstract class AbstractDataSourceMetadataTests() { @Override - public Void doInConnection(Connection connection) throws SQLException, DataAccessException { + public Void doInConnection(Connection connection) throws SQLException, + DataAccessException { return null; } }); @@ -64,10 +64,12 @@ public abstract class AbstractDataSourceMetadataTests() { @Override - public Void doInConnection(Connection connection) throws SQLException, DataAccessException { + public Void doInConnection(Connection connection) throws SQLException, + DataAccessException { assertEquals(Integer.valueOf(1), getDataSourceMetadata().getPoolSize()); assertEquals(Float.valueOf(0.5F), getDataSourceMetadata().getPoolUsage()); return null; @@ -77,15 +79,20 @@ public abstract class AbstractDataSourceMetadataTests() { @Override - public Void doInConnection(Connection connection) throws SQLException, DataAccessException { + public Void doInConnection(Connection connection) throws SQLException, + DataAccessException { jdbcTemplate.execute(new ConnectionCallback() { @Override - public Void doInConnection(Connection connection) throws SQLException, DataAccessException { - assertEquals(Integer.valueOf(2), getDataSourceMetadata().getPoolSize()); - assertEquals(Float.valueOf(1F), getDataSourceMetadata().getPoolUsage()); + public Void doInConnection(Connection connection) + throws SQLException, DataAccessException { + assertEquals(Integer.valueOf(2), getDataSourceMetadata() + .getPoolSize()); + assertEquals(Float.valueOf(1F), getDataSourceMetadata() + .getPoolUsage()); return null; } }); @@ -98,10 +105,8 @@ public abstract class AbstractDataSourceMetadataTests { +public class CommonsDbcpDataSourceMetadataTests extends + AbstractDataSourceMetadataTests { private CommonsDbcpDataSourceMetadata dataSourceMetadata; @@ -42,7 +43,8 @@ public class CommonsDbcpDataSourceMetadataTests extends AbstractDataSourceMetada @Test public void getPoolUsageWithNoCurrent() { - CommonsDbcpDataSourceMetadata dsm = new CommonsDbcpDataSourceMetadata(createDataSource()) { + CommonsDbcpDataSourceMetadata dsm = new CommonsDbcpDataSourceMetadata( + createDataSource()) { @Override public Integer getPoolSize() { return null; @@ -53,7 +55,8 @@ public class CommonsDbcpDataSourceMetadataTests extends AbstractDataSourceMetada @Test public void getPoolUsageWithNoMax() { - CommonsDbcpDataSourceMetadata dsm = new CommonsDbcpDataSourceMetadata(createDataSource()) { + CommonsDbcpDataSourceMetadata dsm = new CommonsDbcpDataSourceMetadata( + createDataSource()) { @Override public Integer getMaxPoolSize() { return null; @@ -72,10 +75,12 @@ public class CommonsDbcpDataSourceMetadataTests extends AbstractDataSourceMetada public void getValidationQuery() { BasicDataSource dataSource = createDataSource(); dataSource.setValidationQuery("SELECT FROM FOO"); - assertEquals("SELECT FROM FOO", new CommonsDbcpDataSourceMetadata(dataSource).getValidationQuery()); + assertEquals("SELECT FROM FOO", + new CommonsDbcpDataSourceMetadata(dataSource).getValidationQuery()); } - private CommonsDbcpDataSourceMetadata createDataSourceMetadata(int minSize, int maxSize) { + private CommonsDbcpDataSourceMetadata createDataSourceMetadata(int minSize, + int maxSize) { BasicDataSource dataSource = createDataSource(); dataSource.setMinIdle(minSize); dataSource.setMaxActive(maxSize); diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java index 69992debb1..6f064b4b83 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java @@ -16,9 +16,6 @@ package org.springframework.boot.autoconfigure.jdbc; -import static org.junit.Assert.*; -import static org.mockito.BDDMockito.*; - import java.util.Arrays; import javax.sql.DataSource; @@ -28,8 +25,11 @@ import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.mockito.BDDMockito.given; + /** - * * @author Stephane Nicoll */ public class CompositeDataSourceMetadataProviderTests { @@ -55,30 +55,30 @@ public class CompositeDataSourceMetadataProviderTests { @Mock private DataSource unknownDataSource; - @Before public void setup() { MockitoAnnotations.initMocks(this); - given(firstProvider.getDataSourceMetadata(firstDataSource)).willReturn(first); - given(firstProvider.getDataSourceMetadata(secondDataSource)).willReturn(second); + given(this.firstProvider.getDataSourceMetadata(this.firstDataSource)).willReturn( + this.first); + given(this.firstProvider.getDataSourceMetadata(this.secondDataSource)) + .willReturn(this.second); } @Test public void createWithProviders() { - CompositeDataSourceMetadataProvider provider = - new CompositeDataSourceMetadataProvider(Arrays.asList(firstProvider, secondProvider)); - assertSame(first, provider.getDataSourceMetadata(firstDataSource)); - assertSame(second, provider.getDataSourceMetadata(secondDataSource)); - assertNull(provider.getDataSourceMetadata(unknownDataSource)); + CompositeDataSourceMetadataProvider provider = new CompositeDataSourceMetadataProvider( + Arrays.asList(this.firstProvider, this.secondProvider)); + assertSame(this.first, provider.getDataSourceMetadata(this.firstDataSource)); + assertSame(this.second, provider.getDataSourceMetadata(this.secondDataSource)); + assertNull(provider.getDataSourceMetadata(this.unknownDataSource)); } @Test public void addProvider() { - CompositeDataSourceMetadataProvider provider = - new CompositeDataSourceMetadataProvider(); - assertNull(provider.getDataSourceMetadata(firstDataSource)); - provider.addDataSourceMetadataProvider(firstProvider); - assertSame(first, provider.getDataSourceMetadata(firstDataSource)); + CompositeDataSourceMetadataProvider provider = new CompositeDataSourceMetadataProvider(); + assertNull(provider.getDataSourceMetadata(this.firstDataSource)); + provider.addDataSourceMetadataProvider(this.firstProvider); + assertSame(this.first, provider.getDataSourceMetadata(this.firstDataSource)); } } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java index 95b1c96dd9..3d6c79a4af 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java @@ -16,21 +16,23 @@ package org.springframework.boot.autoconfigure.jdbc; -import com.zaxxer.hikari.HikariDataSource; import org.junit.Before; +import com.zaxxer.hikari.HikariDataSource; + import static org.junit.Assert.assertEquals; /** * @author Stephane Nicoll */ -public class HikariDataSourceMetadataTests extends AbstractDataSourceMetadataTests { +public class HikariDataSourceMetadataTests extends + AbstractDataSourceMetadataTests { private HikariDataSourceMetadata dataSourceMetadata; @Before public void setup() { - this.dataSourceMetadata = new HikariDataSourceMetadata(createDataSource(0, 2)); + this.dataSourceMetadata = new HikariDataSourceMetadata(createDataSource(0, 2)); } @Override @@ -42,11 +44,13 @@ public class HikariDataSourceMetadataTests extends AbstractDataSourceMetadataTes public void getValidationQuery() { HikariDataSource dataSource = createDataSource(0, 4); dataSource.setConnectionTestQuery("SELECT FROM FOO"); - assertEquals("SELECT FROM FOO", new HikariDataSourceMetadata(dataSource).getValidationQuery()); + assertEquals("SELECT FROM FOO", + new HikariDataSourceMetadata(dataSource).getValidationQuery()); } private HikariDataSource createDataSource(int minSize, int maxSize) { - HikariDataSource dataSource = (HikariDataSource) initializeBuilder().type(HikariDataSource.class).build(); + HikariDataSource dataSource = (HikariDataSource) initializeBuilder().type( + HikariDataSource.class).build(); dataSource.setMinimumIdle(minSize); dataSource.setMaximumPoolSize(maxSize); return dataSource; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java index f07784137f..2b3388ec3e 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java @@ -22,10 +22,10 @@ import org.junit.Before; import static org.junit.Assert.assertEquals; /** - * * @author Stephane Nicoll */ -public class TomcatDataSourceMetadataTests extends AbstractDataSourceMetadataTests { +public class TomcatDataSourceMetadataTests extends + AbstractDataSourceMetadataTests { private TomcatDataSourceMetadata dataSourceMetadata; @@ -43,11 +43,13 @@ public class TomcatDataSourceMetadataTests extends AbstractDataSourceMetadataTes public void getValidationQuery() { DataSource dataSource = createDataSource(0, 4); dataSource.setValidationQuery("SELECT FROM FOO"); - assertEquals("SELECT FROM FOO", new TomcatDataSourceMetadata(dataSource).getValidationQuery()); + assertEquals("SELECT FROM FOO", + new TomcatDataSourceMetadata(dataSource).getValidationQuery()); } private DataSource createDataSource(int minSize, int maxSize) { - DataSource dataSource = (DataSource) initializeBuilder().type(DataSource.class).build(); + DataSource dataSource = (DataSource) initializeBuilder().type(DataSource.class) + .build(); dataSource.setMinIdle(minSize); dataSource.setMaxActive(maxSize); From 169a46b1aa27acbd88c7d336dac0b2221afdda76 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 1 Sep 2014 09:24:29 -0700 Subject: [PATCH 2/8] Rename MetricDataSourceAutoConfiguration Rename MetricDataSourceAutoConfiguration to DataSourceMetricsAutoConfiguration --- ...ration.java => DataSourceMetricsAutoConfiguration.java} | 2 +- .../boot/actuate/endpoint/DataSourcePublicMetrics.java | 2 +- .../src/main/resources/META-INF/spring.factories | 2 +- ...s.java => DataSourceMetricsAutoConfigurationTests.java} | 7 +++++-- 4 files changed, 8 insertions(+), 5 deletions(-) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/{MetricDataSourceAutoConfiguration.java => DataSourceMetricsAutoConfiguration.java} (97%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/{MetricDataSourceAutoConfigurationTests.java => DataSourceMetricsAutoConfigurationTests.java} (97%) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java similarity index 97% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfiguration.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java index 0d2289ccaf..3489150b56 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java @@ -39,7 +39,7 @@ import org.springframework.context.annotation.Import; @ConditionalOnBean(DataSource.class) @AutoConfigureAfter(DataSourceAutoConfiguration.class) @Import(DataSourceMetadataProvidersConfiguration.class) -public class MetricDataSourceAutoConfiguration { +public class DataSourceMetricsAutoConfiguration { @Bean @ConditionalOnBean(DataSourceMetadataProvider.class) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java index 5511c441c1..f386836427 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java @@ -119,7 +119,7 @@ public class DataSourcePublicMetrics implements PublicMetrics { } /** - * Specify if the given value ends with {@value #DATASOURCE_SUFFIX}. + * Specify if the given value ends with {@code dataSource}. */ protected boolean endWithDataSource(String value) { int suffixLength = DATASOURCE_SUFFIX.length(); diff --git a/spring-boot-actuator/src/main/resources/META-INF/spring.factories b/spring-boot-actuator/src/main/resources/META-INF/spring.factories index fc55c4cee0..aa77fbc180 100644 --- a/spring-boot-actuator/src/main/resources/META-INF/spring.factories +++ b/spring-boot-actuator/src/main/resources/META-INF/spring.factories @@ -1,6 +1,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.actuate.autoconfigure.AuditAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.DataSourceMetricsAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.EndpointMBeanExportAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration,\ @@ -8,7 +9,6 @@ org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration, org.springframework.boot.actuate.autoconfigure.JolokiaAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.ManagementSecurityAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.ManagementServerPropertiesAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.MetricDataSourceAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration,\ diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfigurationTests.java similarity index 97% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfigurationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfigurationTests.java index eb981a3207..54999b3b7e 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfigurationTests.java @@ -46,9 +46,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** + * Tests for {@link DataSourceMetricsAutoConfiguration}. + * * @author Stephane Nicoll */ -public class MetricDataSourceAutoConfigurationTests { +public class DataSourceMetricsAutoConfigurationTests { private AnnotationConfigApplicationContext context; @@ -134,7 +136,7 @@ public class MetricDataSourceAutoConfigurationTests { if (config.length > 0) { this.context.register(config); } - this.context.register(MetricDataSourceAutoConfiguration.class); + this.context.register(DataSourceMetricsAutoConfiguration.class); this.context.refresh(); } @@ -193,4 +195,5 @@ public class MetricDataSourceAutoConfigurationTests { return DataSourceBuilder.create().driverClassName("org.hsqldb.jdbc.JDBCDriver") .url("jdbc:hsqldb:mem:test").username("sa"); } + } From e17769fc2fb0376121043522438470eac18119c1 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 1 Sep 2014 10:40:16 -0700 Subject: [PATCH 3/8] Polish DataSourceMetrics code --- .../DataSourceMetricsAutoConfiguration.java | 4 +- .../endpoint/DataSourcePublicMetrics.java | 84 +++++++------------ .../jdbc/AbstractDataSourceMetadata.java | 23 +++-- .../jdbc/CommonsDbcpDataSourceMetadata.java | 4 +- .../CompositeDataSourceMetadataProvider.java | 29 +++---- .../jdbc/DataSourceMetadata.java | 7 +- .../jdbc/HikariDataSourceMetadata.java | 68 +++------------ .../jdbc/TomcatDataSourceMetadata.java | 3 +- .../jdbc/AbstractDataSourceMetadataTests.java | 4 +- .../CommonsDbcpDataSourceMetadataTests.java | 2 + ...positeDataSourceMetadataProviderTests.java | 2 + .../jdbc/HikariDataSourceMetadataTests.java | 2 + .../jdbc/TomcatDataSourceMetadataTests.java | 2 + 13 files changed, 89 insertions(+), 145 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java index 3489150b56..52b129ff1f 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java @@ -43,8 +43,8 @@ public class DataSourceMetricsAutoConfiguration { @Bean @ConditionalOnBean(DataSourceMetadataProvider.class) - @ConditionalOnMissingBean(DataSourcePublicMetrics.class) - DataSourcePublicMetrics dataSourcePublicMetrics() { + @ConditionalOnMissingBean + public DataSourcePublicMetrics dataSourcePublicMetrics() { return new DataSourcePublicMetrics(); } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java index f386836427..d7de1b25fc 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Map; +import java.util.Set; import javax.annotation.PostConstruct; import javax.sql.DataSource; @@ -47,88 +48,63 @@ public class DataSourcePublicMetrics implements PublicMetrics { private ApplicationContext applicationContext; @Autowired - private Collection dataSourceMetadataProviders; + private Collection providers; - private final Map dataSourceMetadataByPrefix = new HashMap(); + private final Map metadataByPrefix = new HashMap(); @PostConstruct public void initialize() { - Map dataSources = this.applicationContext - .getBeansOfType(DataSource.class); DataSource primaryDataSource = getPrimaryDataSource(); - DataSourceMetadataProvider provider = new CompositeDataSourceMetadataProvider( - this.dataSourceMetadataProviders); - for (Map.Entry entry : dataSources.entrySet()) { - String prefix = createPrefix(entry.getKey(), entry.getValue(), entry - .getValue().equals(primaryDataSource)); - DataSourceMetadata dataSourceMetadata = provider.getDataSourceMetadata(entry - .getValue()); + this.providers); + for (Map.Entry entry : this.applicationContext + .getBeansOfType(DataSource.class).entrySet()) { + String beanName = entry.getKey(); + DataSource bean = entry.getValue(); + String prefix = createPrefix(beanName, bean, bean.equals(primaryDataSource)); + DataSourceMetadata dataSourceMetadata = provider.getDataSourceMetadata(bean); if (dataSourceMetadata != null) { - this.dataSourceMetadataByPrefix.put(prefix, dataSourceMetadata); + this.metadataByPrefix.put(prefix, dataSourceMetadata); } } } @Override public Collection> metrics() { - Collection> result = new LinkedHashSet>(); - for (Map.Entry entry : this.dataSourceMetadataByPrefix + Set> metrics = new LinkedHashSet>(); + for (Map.Entry entry : this.metadataByPrefix .entrySet()) { String prefix = entry.getKey(); - // Make sure the prefix ends with a dot - if (!prefix.endsWith(".")) { - prefix = prefix + "."; - } + prefix = (prefix.endsWith(".") ? prefix : prefix + "."); DataSourceMetadata dataSourceMetadata = entry.getValue(); - Integer poolSize = dataSourceMetadata.getPoolSize(); - if (poolSize != null) { - result.add(new Metric(prefix + "active", poolSize)); - } - Float poolUsage = dataSourceMetadata.getPoolUsage(); - if (poolUsage != null) { - result.add(new Metric(prefix + "usage", poolUsage)); - } + addMetric(metrics, prefix + "active", dataSourceMetadata.getPoolSize()); + addMetric(metrics, prefix + "usage", dataSourceMetadata.getPoolUsage()); + } + return metrics; + } + + private void addMetric(Set> metrics, String name, T value) { + if (value != null) { + metrics.add(new Metric(name, value)); } - return result; } /** * Create the prefix to use for the metrics to associate with the given * {@link DataSource}. - * @param dataSourceName the name of the data source bean + * @param name the name of the data source bean * @param dataSource the data source to configure * @param primary if this data source is the primary data source * @return a prefix for the given data source */ - protected String createPrefix(String dataSourceName, DataSource dataSource, - boolean primary) { - StringBuilder sb = new StringBuilder("datasource."); + protected String createPrefix(String name, DataSource dataSource, boolean primary) { if (primary) { - sb.append("primary"); + return "datasource.primary"; } - else if (endWithDataSource(dataSourceName)) { // Strip the data source part out of - // the name - sb.append(dataSourceName.substring(0, dataSourceName.length() - - DATASOURCE_SUFFIX.length())); + if (name.toLowerCase().endsWith(DATASOURCE_SUFFIX.toLowerCase())) { + name = name.substring(0, name.length() - DATASOURCE_SUFFIX.length()); } - else { - sb.append(dataSourceName); - } - return sb.toString(); - } - - /** - * Specify if the given value ends with {@code dataSource}. - */ - protected boolean endWithDataSource(String value) { - int suffixLength = DATASOURCE_SUFFIX.length(); - int valueLength = value.length(); - if (valueLength > suffixLength) { - String suffix = value.substring(valueLength - suffixLength, valueLength); - return suffix.equalsIgnoreCase(DATASOURCE_SUFFIX); - } - return false; + return "datasource." + name; } /** @@ -140,7 +116,7 @@ public class DataSourcePublicMetrics implements PublicMetrics { try { return this.applicationContext.getBean(DataSource.class); } - catch (NoSuchBeanDefinitionException e) { + catch (NoSuchBeanDefinitionException ex) { return null; } } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java index 99308f0a21..9986507b58 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java @@ -24,38 +24,35 @@ import javax.sql.DataSource; * @author Stephane Nicoll * @since 1.2.0 */ -public abstract class AbstractDataSourceMetadata implements +public abstract class AbstractDataSourceMetadata implements DataSourceMetadata { - private final D dataSource; + private final T dataSource; /** * Create an instance with the data source to use. */ - protected AbstractDataSourceMetadata(D dataSource) { + protected AbstractDataSourceMetadata(T dataSource) { this.dataSource = dataSource; } @Override public Float getPoolUsage() { - Integer max = getMaxPoolSize(); - if (max == null) { + Integer maxSize = getMaxPoolSize(); + Integer currentSize = getPoolSize(); + if (maxSize == null || currentSize == null) { return null; } - if (max < 0) { + if (maxSize < 0) { return -1F; } - Integer current = getPoolSize(); - if (current == null) { - return null; - } - if (current == 0) { + if (currentSize == 0) { return 0F; } - return (float) current / max; // something like that + return (float) currentSize / (float) maxSize; } - protected final D getDataSource() { + protected final T getDataSource() { return this.dataSource; } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java index 5042debea5..4089c9bcaa 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java @@ -16,10 +16,12 @@ package org.springframework.boot.autoconfigure.jdbc; +import javax.sql.DataSource; + import org.apache.commons.dbcp.BasicDataSource; /** - * A {@link DataSourceMetadata} implementation for the commons dbcp data source. + * {@link DataSourceMetadata} for a Apache Commons DBCP {@link DataSource}. * * @author Stephane Nicoll * @since 1.2.0 diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProvider.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProvider.java index 187e6357c9..1a794f793b 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProvider.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProvider.java @@ -18,6 +18,7 @@ package org.springframework.boot.autoconfigure.jdbc; import java.util.ArrayList; import java.util.Collection; +import java.util.List; import javax.sql.DataSource; @@ -30,30 +31,30 @@ import javax.sql.DataSource; */ public class CompositeDataSourceMetadataProvider implements DataSourceMetadataProvider { - private final Collection providers; + private final List providers; /** - * Create an instance with an initial collection of delegates to use. - */ - public CompositeDataSourceMetadataProvider( - Collection providers) { - this.providers = providers; - } - - /** - * Create an instance with no delegate. + * Create a {@link CompositeDataSourceMetadataProvider} instance with no delegate. */ public CompositeDataSourceMetadataProvider() { this(new ArrayList()); } + /** + * Create a {@link CompositeDataSourceMetadataProvider} instance with an initial + * collection of delegates to use. + */ + public CompositeDataSourceMetadataProvider( + Collection providers) { + this.providers = new ArrayList(providers); + } + @Override public DataSourceMetadata getDataSourceMetadata(DataSource dataSource) { for (DataSourceMetadataProvider provider : this.providers) { - DataSourceMetadata dataSourceMetadata = provider - .getDataSourceMetadata(dataSource); - if (dataSourceMetadata != null) { - return dataSourceMetadata; + DataSourceMetadata metadata = provider.getDataSourceMetadata(dataSource); + if (metadata != null) { + return metadata; } } return null; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java index b42e4b3767..0ed3ca5914 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java @@ -19,8 +19,8 @@ package org.springframework.boot.autoconfigure.jdbc; import javax.sql.DataSource; /** - * Provide various metadata regarding a {@link DataSource} that are shared by most data - * source types but not accessible in a standard manner. + * Provides access meta-data that is commonly available from most {@link DataSource} + * implementations. * * @author Stephane Nicoll * @since 1.2.0 @@ -28,7 +28,8 @@ import javax.sql.DataSource; public interface DataSourceMetadata { /** - * Return the usage of the pool as a double value between 0 and 1. + * Return the usage of the pool as value between 0 and 1 (or -1 if the pool is not + * limited). *
    *
  • 1 means that the maximum number of connections have been allocated
  • *
  • 0 means that no connection is currently active
  • diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java index 02e69d56a6..140a45cbab 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java @@ -16,14 +16,15 @@ package org.springframework.boot.autoconfigure.jdbc; -import org.springframework.beans.BeansException; +import javax.sql.DataSource; + import org.springframework.beans.DirectFieldAccessor; import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.pool.HikariPool; /** - * A {@link DataSourceMetadata} implementation for the hikari data source. + * {@link DataSourceMetadata} for a Hikari {@link DataSource}. * * @author Stephane Nicoll * @since 1.2.0 @@ -31,20 +32,23 @@ import com.zaxxer.hikari.pool.HikariPool; public class HikariDataSourceMetadata extends AbstractDataSourceMetadata { - private final HikariPoolProvider hikariPoolProvider; - public HikariDataSourceMetadata(HikariDataSource dataSource) { super(dataSource); - this.hikariPoolProvider = new HikariPoolProvider(dataSource); } @Override public Integer getPoolSize() { - HikariPool hikariPool = this.hikariPoolProvider.getHikariPool(); - if (hikariPool != null) { - return hikariPool.getActiveConnections(); + try { + return getHikariPool().getActiveConnections(); } - return null; + catch (Exception ex) { + return null; + } + } + + private HikariPool getHikariPool() { + return (HikariPool) new DirectFieldAccessor(getDataSource()) + .getPropertyValue("pool"); } @Override @@ -62,50 +66,4 @@ public class HikariDataSourceMetadata extends return getDataSource().getConnectionTestQuery(); } - /** - * Provide the {@link HikariPool} instance managed internally by the - * {@link HikariDataSource} as there is no other way to retrieve that information - * except JMX access. - */ - private static class HikariPoolProvider { - private final HikariDataSource dataSource; - - private boolean poolAvailable; - - private HikariPoolProvider(HikariDataSource dataSource) { - this.dataSource = dataSource; - this.poolAvailable = isHikariPoolAvailable(); - } - - public HikariPool getHikariPool() { - if (!this.poolAvailable) { - return null; - } - - Object value = doGetValue(); - if (value instanceof HikariPool) { - return (HikariPool) value; - } - return null; - } - - private boolean isHikariPoolAvailable() { - try { - doGetValue(); - return true; - } - catch (BeansException e) { // No such field - return false; - } - catch (SecurityException e) { // Security manager prevents to read the value - return false; - } - } - - private Object doGetValue() { - DirectFieldAccessor accessor = new DirectFieldAccessor(this.dataSource); - return accessor.getPropertyValue("pool"); - } - } - } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadata.java index fd15d1cb4a..20a178cece 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadata.java @@ -20,8 +20,7 @@ import org.apache.tomcat.jdbc.pool.ConnectionPool; import org.apache.tomcat.jdbc.pool.DataSource; /** - * - * A {@link DataSourceMetadata} implementation for the tomcat data source. + * {@link DataSourceMetadata} for a Tomcat {@link DataSource}. * * @author Stephane Nicoll */ diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadataTests.java index 71d45bdbe6..41ba22d879 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadataTests.java @@ -27,9 +27,11 @@ import org.springframework.jdbc.core.JdbcTemplate; import static org.junit.Assert.assertEquals; /** + * Abstract base class for {@link DataSourceMetadata} tests. + * * @author Stephane Nicoll */ -public abstract class AbstractDataSourceMetadataTests { +public abstract class AbstractDataSourceMetadataTests> { /** * Return a data source metadata instance with a min size of 0 and max size of 2. diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadataTests.java index 6c0232a832..ee8bad75ba 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadataTests.java @@ -24,6 +24,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; /** + * Tests for {@link CommonsDbcpDataSourceMetadata}. + * * @author Stephane Nicoll */ public class CommonsDbcpDataSourceMetadataTests extends diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java index 6f064b4b83..4b02a0f390 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java @@ -30,6 +30,8 @@ import static org.junit.Assert.assertSame; import static org.mockito.BDDMockito.given; /** + * Tests for {@link CompositeDataSourceMetadataProvider}. + * * @author Stephane Nicoll */ public class CompositeDataSourceMetadataProviderTests { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java index 3d6c79a4af..bac06bd32b 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java @@ -23,6 +23,8 @@ import com.zaxxer.hikari.HikariDataSource; import static org.junit.Assert.assertEquals; /** + * Tests for {@link HikariDataSourceMetadata}. + * * @author Stephane Nicoll */ public class HikariDataSourceMetadataTests extends diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java index 2b3388ec3e..6b0f8e2b0c 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java @@ -22,6 +22,8 @@ import org.junit.Before; import static org.junit.Assert.assertEquals; /** + * Tests for {@link TomcatDataSourceMetadata}. + * * @author Stephane Nicoll */ public class TomcatDataSourceMetadataTests extends From e56be6cf3d329c950bcdd2ec42dbd85dd40bdfa8 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 1 Sep 2014 11:06:02 -0700 Subject: [PATCH 4/8] DataSourceMetadata -> DataSourcePoolMetadata Rename DataSourceMetadata to DataSourcePoolMetadata --- .../DataSourceMetricsAutoConfiguration.java | 8 +-- .../HealthIndicatorAutoConfiguration.java | 37 +++++----- .../endpoint/DataSourcePublicMetrics.java | 26 +++---- ...HealthIndicatorAutoConfigurationTests.java | 4 +- ...va => AbstractDataSourcePoolMetadata.java} | 14 ++-- ...=> CommonsDbcpDataSourcePoolMetadata.java} | 14 ++-- .../CompositeDataSourceMetadataProvider.java | 70 ------------------- ...mpositeDataSourcePoolMetadataProvider.java | 70 +++++++++++++++++++ ...adata.java => DataSourcePoolMetadata.java} | 14 ++-- ...va => DataSourcePoolMetadataProvider.java} | 8 +-- ...cePoolMetadataProvidersConfiguration.java} | 38 +++++----- ...java => HikariDataSourcePoolMetadata.java} | 14 ++-- ...java => TomcatDataSourcePoolMetadata.java} | 12 ++-- ... AbstractDataSourcePoolMetadataTests.java} | 20 +++--- ...mmonsDbcpDataSourcePoolMetadataTests.java} | 32 ++++----- ...positeDataSourceMetadataProviderTests.java | 28 ++++---- ...=> HikariDataSourcePoolMetadataTests.java} | 14 ++-- ...=> TomcatDataSourcePoolMetadataTests.java} | 14 ++-- 18 files changed, 222 insertions(+), 215 deletions(-) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{AbstractDataSourceMetadata.java => AbstractDataSourcePoolMetadata.java} (78%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{CommonsDbcpDataSourceMetadata.java => CommonsDbcpDataSourcePoolMetadata.java} (76%) delete mode 100644 spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProvider.java create mode 100644 spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourcePoolMetadataProvider.java rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{DataSourceMetadata.java => DataSourcePoolMetadata.java} (91%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{DataSourceMetadataProvider.java => DataSourcePoolMetadataProvider.java} (75%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{DataSourceMetadataProvidersConfiguration.java => DataSourcePoolMetadataProvidersConfiguration.java} (59%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{HikariDataSourceMetadata.java => HikariDataSourcePoolMetadata.java} (81%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{TomcatDataSourceMetadata.java => TomcatDataSourcePoolMetadata.java} (78%) rename spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/{AbstractDataSourceMetadataTests.java => AbstractDataSourcePoolMetadataTests.java} (88%) rename spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/{CommonsDbcpDataSourceMetadataTests.java => CommonsDbcpDataSourcePoolMetadataTests.java} (64%) rename spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/{HikariDataSourceMetadataTests.java => HikariDataSourcePoolMetadataTests.java} (75%) rename spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/{TomcatDataSourceMetadataTests.java => TomcatDataSourcePoolMetadataTests.java} (76%) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java index 52b129ff1f..f675b6a591 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java @@ -24,8 +24,8 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceMetadataProvider; -import org.springframework.boot.autoconfigure.jdbc.DataSourceMetadataProvidersConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadataProvidersConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; @@ -38,11 +38,11 @@ import org.springframework.context.annotation.Import; */ @ConditionalOnBean(DataSource.class) @AutoConfigureAfter(DataSourceAutoConfiguration.class) -@Import(DataSourceMetadataProvidersConfiguration.class) +@Import(DataSourcePoolMetadataProvidersConfiguration.class) public class DataSourceMetricsAutoConfiguration { @Bean - @ConditionalOnBean(DataSourceMetadataProvider.class) + @ConditionalOnBean(DataSourcePoolMetadataProvider.class) @ConditionalOnMissingBean public DataSourcePublicMetrics dataSourcePublicMetrics() { return new DataSourcePublicMetrics(); diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java index ec5b14844c..903de26df2 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java @@ -27,6 +27,7 @@ import org.apache.solr.client.solrj.SolrServer; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; import org.springframework.boot.actuate.health.CompositeHealthIndicator; import org.springframework.boot.actuate.health.DataSourceHealthIndicator; import org.springframework.boot.actuate.health.HealthAggregator; @@ -36,7 +37,6 @@ import org.springframework.boot.actuate.health.OrderedHealthAggregator; import org.springframework.boot.actuate.health.RabbitHealthIndicator; import org.springframework.boot.actuate.health.RedisHealthIndicator; import org.springframework.boot.actuate.health.SolrHealthIndicator; -import org.springframework.boot.actuate.health.ApplicationHealthIndicator; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -44,10 +44,10 @@ import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.jdbc.CompositeDataSourceMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.CompositeDataSourcePoolMetadataProvider; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceMetadata; -import org.springframework.boot.autoconfigure.jdbc.DataSourceMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadata; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoDataAutoConfiguration; import org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration; @@ -103,33 +103,36 @@ public class HealthIndicatorAutoConfiguration { private Map dataSources; @Autowired(required = false) - private Collection metadataProviders = Collections.emptyList(); + private Collection metadataProviders = Collections + .emptyList(); @Bean @ConditionalOnMissingBean(name = "dbHealthIndicator") public HealthIndicator dbHealthIndicator() { - DataSourceMetadataProvider metadataProvider = - new CompositeDataSourceMetadataProvider(this.metadataProviders); + DataSourcePoolMetadataProvider metadataProvider = new CompositeDataSourcePoolMetadataProvider( + this.metadataProviders); if (this.dataSources.size() == 1) { - return createDataSourceHealthIndicator(metadataProvider, - this.dataSources.values().iterator().next()); + return createDataSourceHealthIndicator(metadataProvider, this.dataSources + .values().iterator().next()); } CompositeHealthIndicator composite = new CompositeHealthIndicator( this.healthAggregator); for (Map.Entry entry : this.dataSources.entrySet()) { - composite.addHealthIndicator(entry.getKey(), - createDataSourceHealthIndicator(metadataProvider, entry.getValue())); + composite.addHealthIndicator( + entry.getKey(), + createDataSourceHealthIndicator(metadataProvider, + entry.getValue())); } return composite; } - private DataSourceHealthIndicator createDataSourceHealthIndicator(DataSourceMetadataProvider provider, - DataSource dataSource) { - + private DataSourceHealthIndicator createDataSourceHealthIndicator( + DataSourcePoolMetadataProvider provider, DataSource dataSource) { String validationQuery = null; - DataSourceMetadata dataSourceMetadata = provider.getDataSourceMetadata(dataSource); - if (dataSourceMetadata != null) { - validationQuery = dataSourceMetadata.getValidationQuery(); + DataSourcePoolMetadata poolMetadata = provider + .getDataSourcePoolMetadata(dataSource); + if (poolMetadata != null) { + validationQuery = poolMetadata.getValidationQuery(); } return new DataSourceHealthIndicator(dataSource, validationQuery); } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java index d7de1b25fc..786a078d56 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java @@ -28,9 +28,9 @@ import javax.sql.DataSource; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.autoconfigure.jdbc.CompositeDataSourceMetadataProvider; -import org.springframework.boot.autoconfigure.jdbc.DataSourceMetadata; -import org.springframework.boot.autoconfigure.jdbc.DataSourceMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.CompositeDataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadata; +import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadataProvider; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Primary; @@ -48,23 +48,23 @@ public class DataSourcePublicMetrics implements PublicMetrics { private ApplicationContext applicationContext; @Autowired - private Collection providers; + private Collection providers; - private final Map metadataByPrefix = new HashMap(); + private final Map metadataByPrefix = new HashMap(); @PostConstruct public void initialize() { DataSource primaryDataSource = getPrimaryDataSource(); - DataSourceMetadataProvider provider = new CompositeDataSourceMetadataProvider( + DataSourcePoolMetadataProvider provider = new CompositeDataSourcePoolMetadataProvider( this.providers); for (Map.Entry entry : this.applicationContext .getBeansOfType(DataSource.class).entrySet()) { String beanName = entry.getKey(); DataSource bean = entry.getValue(); String prefix = createPrefix(beanName, bean, bean.equals(primaryDataSource)); - DataSourceMetadata dataSourceMetadata = provider.getDataSourceMetadata(bean); - if (dataSourceMetadata != null) { - this.metadataByPrefix.put(prefix, dataSourceMetadata); + DataSourcePoolMetadata poolMetadata = provider.getDataSourcePoolMetadata(bean); + if (poolMetadata != null) { + this.metadataByPrefix.put(prefix, poolMetadata); } } } @@ -72,13 +72,13 @@ public class DataSourcePublicMetrics implements PublicMetrics { @Override public Collection> metrics() { Set> metrics = new LinkedHashSet>(); - for (Map.Entry entry : this.metadataByPrefix + for (Map.Entry entry : this.metadataByPrefix .entrySet()) { String prefix = entry.getKey(); prefix = (prefix.endsWith(".") ? prefix : prefix + "."); - DataSourceMetadata dataSourceMetadata = entry.getValue(); - addMetric(metrics, prefix + "active", dataSourceMetadata.getPoolSize()); - addMetric(metrics, prefix + "usage", dataSourceMetadata.getPoolUsage()); + DataSourcePoolMetadata dataSourceMetadata = entry.getValue(); + addMetric(metrics, prefix + "active", dataSourceMetadata.getActive()); + addMetric(metrics, prefix + "usage", dataSourceMetadata.getUsage()); } return metrics; } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfigurationTests.java index c0bac2d0dd..3ee929c98f 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfigurationTests.java @@ -33,7 +33,7 @@ import org.springframework.boot.actuate.health.ApplicationHealthIndicator; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; -import org.springframework.boot.autoconfigure.jdbc.DataSourceMetadataProvidersConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadataProvidersConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; @@ -167,7 +167,7 @@ public class HealthIndicatorAutoConfigurationTests { public void dataSourceHealthIndicatorWithCustomValidationQuery() { this.context = new AnnotationConfigApplicationContext(); this.context.register(PropertyPlaceholderAutoConfiguration.class, DataSourceProperties.class, - DataSourceConfig.class, DataSourceMetadataProvidersConfiguration.class, + DataSourceConfig.class, DataSourcePoolMetadataProvidersConfiguration.class, HealthIndicatorAutoConfiguration.class); EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.validation-query:SELECT from FOOBAR"); this.context.refresh(); diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadata.java similarity index 78% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadata.java index 9986507b58..f356e165c6 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadata.java @@ -19,27 +19,27 @@ package org.springframework.boot.autoconfigure.jdbc; import javax.sql.DataSource; /** - * A base {@link DataSourceMetadata} implementation. + * A base {@link DataSourcePoolMetadata} implementation. * * @author Stephane Nicoll * @since 1.2.0 */ -public abstract class AbstractDataSourceMetadata implements - DataSourceMetadata { +public abstract class AbstractDataSourcePoolMetadata implements + DataSourcePoolMetadata { private final T dataSource; /** * Create an instance with the data source to use. */ - protected AbstractDataSourceMetadata(T dataSource) { + protected AbstractDataSourcePoolMetadata(T dataSource) { this.dataSource = dataSource; } @Override - public Float getPoolUsage() { - Integer maxSize = getMaxPoolSize(); - Integer currentSize = getPoolSize(); + public Float getUsage() { + Integer maxSize = getMax(); + Integer currentSize = getActive(); if (maxSize == null || currentSize == null) { return null; } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourcePoolMetadata.java similarity index 76% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourcePoolMetadata.java index 4089c9bcaa..ae735730f9 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourcePoolMetadata.java @@ -21,30 +21,30 @@ import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; /** - * {@link DataSourceMetadata} for a Apache Commons DBCP {@link DataSource}. + * {@link DataSourcePoolMetadata} for a Apache Commons DBCP {@link DataSource}. * * @author Stephane Nicoll * @since 1.2.0 */ -public class CommonsDbcpDataSourceMetadata extends - AbstractDataSourceMetadata { +public class CommonsDbcpDataSourcePoolMetadata extends + AbstractDataSourcePoolMetadata { - public CommonsDbcpDataSourceMetadata(BasicDataSource dataSource) { + public CommonsDbcpDataSourcePoolMetadata(BasicDataSource dataSource) { super(dataSource); } @Override - public Integer getPoolSize() { + public Integer getActive() { return getDataSource().getNumActive(); } @Override - public Integer getMaxPoolSize() { + public Integer getMax() { return getDataSource().getMaxActive(); } @Override - public Integer getMinPoolSize() { + public Integer getMin() { return getDataSource().getMinIdle(); } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProvider.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProvider.java deleted file mode 100644 index 1a794f793b..0000000000 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProvider.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2012-2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.autoconfigure.jdbc; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import javax.sql.DataSource; - -/** - * A {@link DataSourceMetadataProvider} implementation that returns the first - * {@link DataSourceMetadata} that is found by one of its delegate. - * - * @author Stephane Nicoll - * @since 1.2.0 - */ -public class CompositeDataSourceMetadataProvider implements DataSourceMetadataProvider { - - private final List providers; - - /** - * Create a {@link CompositeDataSourceMetadataProvider} instance with no delegate. - */ - public CompositeDataSourceMetadataProvider() { - this(new ArrayList()); - } - - /** - * Create a {@link CompositeDataSourceMetadataProvider} instance with an initial - * collection of delegates to use. - */ - public CompositeDataSourceMetadataProvider( - Collection providers) { - this.providers = new ArrayList(providers); - } - - @Override - public DataSourceMetadata getDataSourceMetadata(DataSource dataSource) { - for (DataSourceMetadataProvider provider : this.providers) { - DataSourceMetadata metadata = provider.getDataSourceMetadata(dataSource); - if (metadata != null) { - return metadata; - } - } - return null; - } - - /** - * Add a {@link DataSourceMetadataProvider} delegate to the list. - */ - public void addDataSourceMetadataProvider(DataSourceMetadataProvider provider) { - this.providers.add(provider); - } - -} diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourcePoolMetadataProvider.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourcePoolMetadataProvider.java new file mode 100644 index 0000000000..5f0de67da5 --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourcePoolMetadataProvider.java @@ -0,0 +1,70 @@ +/* + * Copyright 2012-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure.jdbc; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.sql.DataSource; + +/** + * A {@link DataSourcePoolMetadataProvider} implementation that returns the first + * {@link DataSourcePoolMetadata} that is found by one of its delegate. + * + * @author Stephane Nicoll + * @since 1.2.0 + */ +public class CompositeDataSourcePoolMetadataProvider implements DataSourcePoolMetadataProvider { + + private final List providers; + + /** + * Create a {@link CompositeDataSourcePoolMetadataProvider} instance with no delegate. + */ + public CompositeDataSourcePoolMetadataProvider() { + this(new ArrayList()); + } + + /** + * Create a {@link CompositeDataSourcePoolMetadataProvider} instance with an initial + * collection of delegates to use. + */ + public CompositeDataSourcePoolMetadataProvider( + Collection providers) { + this.providers = new ArrayList(providers); + } + + @Override + public DataSourcePoolMetadata getDataSourcePoolMetadata(DataSource dataSource) { + for (DataSourcePoolMetadataProvider provider : this.providers) { + DataSourcePoolMetadata metadata = provider.getDataSourcePoolMetadata(dataSource); + if (metadata != null) { + return metadata; + } + } + return null; + } + + /** + * Add a {@link DataSourcePoolMetadataProvider} delegate to the list. + */ + public void addDataSourceMetadataProvider(DataSourcePoolMetadataProvider provider) { + this.providers.add(provider); + } + +} diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadata.java similarity index 91% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadata.java index 0ed3ca5914..18c3d8d0e5 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadata.java @@ -19,13 +19,13 @@ package org.springframework.boot.autoconfigure.jdbc; import javax.sql.DataSource; /** - * Provides access meta-data that is commonly available from most {@link DataSource} - * implementations. + * Provides access meta-data that is commonly available from most polled + * {@link DataSource} implementations. * * @author Stephane Nicoll * @since 1.2.0 */ -public interface DataSourceMetadata { +public interface DataSourcePoolMetadata { /** * Return the usage of the pool as value between 0 and 1 (or -1 if the pool is not @@ -38,26 +38,26 @@ public interface DataSourceMetadata { * This may also return {@code null} if the data source does not provide the necessary * information to compute the poll usage. */ - Float getPoolUsage(); + Float getUsage(); /** * Return the current number of active connections that have been allocated from the * data source or {@code null} if that information is not available. */ - Integer getPoolSize(); + Integer getActive(); /** * Return the maximum number of active connections that can be allocated at the same * time or {@code -1} if there is no limit. Can also return {@code null} if that * information is not available. */ - Integer getMaxPoolSize(); + Integer getMax(); /** * Return the minimum number of idle connections in the pool or {@code null} if that * information is not available. */ - Integer getMinPoolSize(); + Integer getMin(); /** * Return the query to use to validate that a connection is valid or {@code null} if diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvider.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvider.java similarity index 75% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvider.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvider.java index 178667c2d1..49fe295a1c 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvider.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvider.java @@ -19,17 +19,17 @@ package org.springframework.boot.autoconfigure.jdbc; import javax.sql.DataSource; /** - * Provide a {@link DataSourceMetadata} based on a {@link DataSource}. + * Provide a {@link DataSourcePoolMetadata} based on a {@link DataSource}. * * @author Stephane Nicoll * @since 1.2.0 */ -public interface DataSourceMetadataProvider { +public interface DataSourcePoolMetadataProvider { /** - * Return the {@link DataSourceMetadata} instance able to manage the specified + * Return the {@link DataSourcePoolMetadata} instance able to manage the specified * {@link DataSource} or {@code null} if the given data source could not be handled. */ - DataSourceMetadata getDataSourceMetadata(DataSource dataSource); + DataSourcePoolMetadata getDataSourcePoolMetadata(DataSource dataSource); } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvidersConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvidersConfiguration.java similarity index 59% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvidersConfiguration.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvidersConfiguration.java index ac3cf39482..92646ef0dc 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvidersConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvidersConfiguration.java @@ -26,26 +26,27 @@ import org.springframework.context.annotation.Configuration; import com.zaxxer.hikari.HikariDataSource; /** - * Register the {@link DataSourceMetadataProvider} instances for the supported data + * Register the {@link DataSourcePoolMetadataProvider} instances for the supported data * sources. * * @author Stephane Nicoll * @since 1.2.0 */ @Configuration -public class DataSourceMetadataProvidersConfiguration { +public class DataSourcePoolMetadataProvidersConfiguration { @Configuration @ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class) - static class TomcatDataSourceProviderConfiguration { + static class TomcatDataSourcePoolMetadataProviderConfiguration { @Bean - public DataSourceMetadataProvider tomcatDataSourceProvider() { - return new DataSourceMetadataProvider() { + public DataSourcePoolMetadataProvider tomcatPoolDataSourceMetadataProvider() { + return new DataSourcePoolMetadataProvider() { @Override - public DataSourceMetadata getDataSourceMetadata(DataSource dataSource) { + public DataSourcePoolMetadata getDataSourcePoolMetadata( + DataSource dataSource) { if (dataSource instanceof org.apache.tomcat.jdbc.pool.DataSource) { - return new TomcatDataSourceMetadata( + return new TomcatDataSourcePoolMetadata( (org.apache.tomcat.jdbc.pool.DataSource) dataSource); } return null; @@ -57,15 +58,17 @@ public class DataSourceMetadataProvidersConfiguration { @Configuration @ConditionalOnClass(HikariDataSource.class) - static class HikariDataSourceProviderConfiguration { + static class HikariPoolDataSourceMetadataProviderConfiguration { @Bean - public DataSourceMetadataProvider hikariDataSourceProvider() { - return new DataSourceMetadataProvider() { + public DataSourcePoolMetadataProvider hikariPoolDataSourceMetadataProvider() { + return new DataSourcePoolMetadataProvider() { @Override - public DataSourceMetadata getDataSourceMetadata(DataSource dataSource) { + public DataSourcePoolMetadata getDataSourcePoolMetadata( + DataSource dataSource) { if (dataSource instanceof HikariDataSource) { - return new HikariDataSourceMetadata((HikariDataSource) dataSource); + return new HikariDataSourcePoolMetadata( + (HikariDataSource) dataSource); } return null; } @@ -76,15 +79,16 @@ public class DataSourceMetadataProvidersConfiguration { @Configuration @ConditionalOnClass(BasicDataSource.class) - static class CommonsDbcpDataSourceProviderConfiguration { + static class CommonsDbcpPoolDataSourceMetadataProviderConfiguration { @Bean - public DataSourceMetadataProvider commonsDbcpDataSourceProvider() { - return new DataSourceMetadataProvider() { + public DataSourcePoolMetadataProvider commonsDbcpPoolDataSourceMetadataProvider() { + return new DataSourcePoolMetadataProvider() { @Override - public DataSourceMetadata getDataSourceMetadata(DataSource dataSource) { + public DataSourcePoolMetadata getDataSourcePoolMetadata( + DataSource dataSource) { if (dataSource instanceof BasicDataSource) { - return new CommonsDbcpDataSourceMetadata( + return new CommonsDbcpDataSourcePoolMetadata( (BasicDataSource) dataSource); } return null; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadata.java similarity index 81% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadata.java index 140a45cbab..4812e44a1f 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadata.java @@ -24,20 +24,20 @@ import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.pool.HikariPool; /** - * {@link DataSourceMetadata} for a Hikari {@link DataSource}. + * {@link DataSourcePoolMetadata} for a Hikari {@link DataSource}. * * @author Stephane Nicoll * @since 1.2.0 */ -public class HikariDataSourceMetadata extends - AbstractDataSourceMetadata { +public class HikariDataSourcePoolMetadata extends + AbstractDataSourcePoolMetadata { - public HikariDataSourceMetadata(HikariDataSource dataSource) { + public HikariDataSourcePoolMetadata(HikariDataSource dataSource) { super(dataSource); } @Override - public Integer getPoolSize() { + public Integer getActive() { try { return getHikariPool().getActiveConnections(); } @@ -52,12 +52,12 @@ public class HikariDataSourceMetadata extends } @Override - public Integer getMaxPoolSize() { + public Integer getMax() { return getDataSource().getMaximumPoolSize(); } @Override - public Integer getMinPoolSize() { + public Integer getMin() { return getDataSource().getMinimumIdle(); } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadata.java similarity index 78% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadata.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadata.java index 20a178cece..87f7f3e23c 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadata.java @@ -20,29 +20,29 @@ import org.apache.tomcat.jdbc.pool.ConnectionPool; import org.apache.tomcat.jdbc.pool.DataSource; /** - * {@link DataSourceMetadata} for a Tomcat {@link DataSource}. + * {@link DataSourcePoolMetadata} for a Tomcat {@link DataSource}. * * @author Stephane Nicoll */ -public class TomcatDataSourceMetadata extends AbstractDataSourceMetadata { +public class TomcatDataSourcePoolMetadata extends AbstractDataSourcePoolMetadata { - public TomcatDataSourceMetadata(DataSource dataSource) { + public TomcatDataSourcePoolMetadata(DataSource dataSource) { super(dataSource); } @Override - public Integer getPoolSize() { + public Integer getActive() { ConnectionPool pool = getDataSource().getPool(); return (pool == null ? 0 : pool.getActive()); } @Override - public Integer getMaxPoolSize() { + public Integer getMax() { return getDataSource().getMaxActive(); } @Override - public Integer getMinPoolSize() { + public Integer getMin() { return getDataSource().getMinIdle(); } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadataTests.java similarity index 88% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadataTests.java rename to spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadataTests.java index 41ba22d879..3e158ea74e 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadataTests.java @@ -27,11 +27,11 @@ import org.springframework.jdbc.core.JdbcTemplate; import static org.junit.Assert.assertEquals; /** - * Abstract base class for {@link DataSourceMetadata} tests. + * Abstract base class for {@link DataSourcePoolMetadata} tests. * * @author Stephane Nicoll */ -public abstract class AbstractDataSourceMetadataTests> { +public abstract class AbstractDataSourcePoolMetadataTests> { /** * Return a data source metadata instance with a min size of 0 and max size of 2. @@ -40,12 +40,12 @@ public abstract class AbstractDataSourceMetadataTests { +public class CommonsDbcpDataSourcePoolMetadataTests extends + AbstractDataSourcePoolMetadataTests { - private CommonsDbcpDataSourceMetadata dataSourceMetadata; + private CommonsDbcpDataSourcePoolMetadata dataSourceMetadata; @Before public void setup() { @@ -39,38 +39,38 @@ public class CommonsDbcpDataSourceMetadataTests extends } @Override - protected CommonsDbcpDataSourceMetadata getDataSourceMetadata() { + protected CommonsDbcpDataSourcePoolMetadata getDataSourceMetadata() { return this.dataSourceMetadata; } @Test public void getPoolUsageWithNoCurrent() { - CommonsDbcpDataSourceMetadata dsm = new CommonsDbcpDataSourceMetadata( + CommonsDbcpDataSourcePoolMetadata dsm = new CommonsDbcpDataSourcePoolMetadata( createDataSource()) { @Override - public Integer getPoolSize() { + public Integer getActive() { return null; } }; - assertNull(dsm.getPoolUsage()); + assertNull(dsm.getUsage()); } @Test public void getPoolUsageWithNoMax() { - CommonsDbcpDataSourceMetadata dsm = new CommonsDbcpDataSourceMetadata( + CommonsDbcpDataSourcePoolMetadata dsm = new CommonsDbcpDataSourcePoolMetadata( createDataSource()) { @Override - public Integer getMaxPoolSize() { + public Integer getMax() { return null; } }; - assertNull(dsm.getPoolUsage()); + assertNull(dsm.getUsage()); } @Test public void getPoolUsageWithUnlimitedPool() { - DataSourceMetadata unlimitedDataSource = createDataSourceMetadata(0, -1); - assertEquals(Float.valueOf(-1F), unlimitedDataSource.getPoolUsage()); + DataSourcePoolMetadata unlimitedDataSource = createDataSourceMetadata(0, -1); + assertEquals(Float.valueOf(-1F), unlimitedDataSource.getUsage()); } @Override @@ -78,15 +78,15 @@ public class CommonsDbcpDataSourceMetadataTests extends BasicDataSource dataSource = createDataSource(); dataSource.setValidationQuery("SELECT FROM FOO"); assertEquals("SELECT FROM FOO", - new CommonsDbcpDataSourceMetadata(dataSource).getValidationQuery()); + new CommonsDbcpDataSourcePoolMetadata(dataSource).getValidationQuery()); } - private CommonsDbcpDataSourceMetadata createDataSourceMetadata(int minSize, + private CommonsDbcpDataSourcePoolMetadata createDataSourceMetadata(int minSize, int maxSize) { BasicDataSource dataSource = createDataSource(); dataSource.setMinIdle(minSize); dataSource.setMaxActive(maxSize); - return new CommonsDbcpDataSourceMetadata(dataSource); + return new CommonsDbcpDataSourcePoolMetadata(dataSource); } private BasicDataSource createDataSource() { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java index 4b02a0f390..bc50567397 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java @@ -30,26 +30,26 @@ import static org.junit.Assert.assertSame; import static org.mockito.BDDMockito.given; /** - * Tests for {@link CompositeDataSourceMetadataProvider}. + * Tests for {@link CompositeDataSourcePoolMetadataProvider}. * * @author Stephane Nicoll */ public class CompositeDataSourceMetadataProviderTests { @Mock - private DataSourceMetadataProvider firstProvider; + private DataSourcePoolMetadataProvider firstProvider; @Mock - private DataSourceMetadata first; + private DataSourcePoolMetadata first; @Mock private DataSource firstDataSource; @Mock - private DataSourceMetadataProvider secondProvider; + private DataSourcePoolMetadataProvider secondProvider; @Mock - private DataSourceMetadata second; + private DataSourcePoolMetadata second; @Mock private DataSource secondDataSource; @@ -60,27 +60,27 @@ public class CompositeDataSourceMetadataProviderTests { @Before public void setup() { MockitoAnnotations.initMocks(this); - given(this.firstProvider.getDataSourceMetadata(this.firstDataSource)).willReturn( + given(this.firstProvider.getDataSourcePoolMetadata(this.firstDataSource)).willReturn( this.first); - given(this.firstProvider.getDataSourceMetadata(this.secondDataSource)) + given(this.firstProvider.getDataSourcePoolMetadata(this.secondDataSource)) .willReturn(this.second); } @Test public void createWithProviders() { - CompositeDataSourceMetadataProvider provider = new CompositeDataSourceMetadataProvider( + CompositeDataSourcePoolMetadataProvider provider = new CompositeDataSourcePoolMetadataProvider( Arrays.asList(this.firstProvider, this.secondProvider)); - assertSame(this.first, provider.getDataSourceMetadata(this.firstDataSource)); - assertSame(this.second, provider.getDataSourceMetadata(this.secondDataSource)); - assertNull(provider.getDataSourceMetadata(this.unknownDataSource)); + assertSame(this.first, provider.getDataSourcePoolMetadata(this.firstDataSource)); + assertSame(this.second, provider.getDataSourcePoolMetadata(this.secondDataSource)); + assertNull(provider.getDataSourcePoolMetadata(this.unknownDataSource)); } @Test public void addProvider() { - CompositeDataSourceMetadataProvider provider = new CompositeDataSourceMetadataProvider(); - assertNull(provider.getDataSourceMetadata(this.firstDataSource)); + CompositeDataSourcePoolMetadataProvider provider = new CompositeDataSourcePoolMetadataProvider(); + assertNull(provider.getDataSourcePoolMetadata(this.firstDataSource)); provider.addDataSourceMetadataProvider(this.firstProvider); - assertSame(this.first, provider.getDataSourceMetadata(this.firstDataSource)); + assertSame(this.first, provider.getDataSourcePoolMetadata(this.firstDataSource)); } } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadataTests.java similarity index 75% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java rename to spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadataTests.java index bac06bd32b..7855e8b2b9 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadataTests.java @@ -23,22 +23,22 @@ import com.zaxxer.hikari.HikariDataSource; import static org.junit.Assert.assertEquals; /** - * Tests for {@link HikariDataSourceMetadata}. + * Tests for {@link HikariDataSourcePoolMetadata}. * * @author Stephane Nicoll */ -public class HikariDataSourceMetadataTests extends - AbstractDataSourceMetadataTests { +public class HikariDataSourcePoolMetadataTests extends + AbstractDataSourcePoolMetadataTests { - private HikariDataSourceMetadata dataSourceMetadata; + private HikariDataSourcePoolMetadata dataSourceMetadata; @Before public void setup() { - this.dataSourceMetadata = new HikariDataSourceMetadata(createDataSource(0, 2)); + this.dataSourceMetadata = new HikariDataSourcePoolMetadata(createDataSource(0, 2)); } @Override - protected HikariDataSourceMetadata getDataSourceMetadata() { + protected HikariDataSourcePoolMetadata getDataSourceMetadata() { return this.dataSourceMetadata; } @@ -47,7 +47,7 @@ public class HikariDataSourceMetadataTests extends HikariDataSource dataSource = createDataSource(0, 4); dataSource.setConnectionTestQuery("SELECT FROM FOO"); assertEquals("SELECT FROM FOO", - new HikariDataSourceMetadata(dataSource).getValidationQuery()); + new HikariDataSourcePoolMetadata(dataSource).getValidationQuery()); } private HikariDataSource createDataSource(int minSize, int maxSize) { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadataTests.java similarity index 76% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java rename to spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadataTests.java index 6b0f8e2b0c..287d069ca5 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadataTests.java @@ -22,22 +22,22 @@ import org.junit.Before; import static org.junit.Assert.assertEquals; /** - * Tests for {@link TomcatDataSourceMetadata}. + * Tests for {@link TomcatDataSourcePoolMetadata}. * * @author Stephane Nicoll */ -public class TomcatDataSourceMetadataTests extends - AbstractDataSourceMetadataTests { +public class TomcatDataSourcePoolMetadataTests extends + AbstractDataSourcePoolMetadataTests { - private TomcatDataSourceMetadata dataSourceMetadata; + private TomcatDataSourcePoolMetadata dataSourceMetadata; @Before public void setup() { - this.dataSourceMetadata = new TomcatDataSourceMetadata(createDataSource(0, 2)); + this.dataSourceMetadata = new TomcatDataSourcePoolMetadata(createDataSource(0, 2)); } @Override - protected TomcatDataSourceMetadata getDataSourceMetadata() { + protected TomcatDataSourcePoolMetadata getDataSourceMetadata() { return this.dataSourceMetadata; } @@ -46,7 +46,7 @@ public class TomcatDataSourceMetadataTests extends DataSource dataSource = createDataSource(0, 4); dataSource.setValidationQuery("SELECT FROM FOO"); assertEquals("SELECT FROM FOO", - new TomcatDataSourceMetadata(dataSource).getValidationQuery()); + new TomcatDataSourcePoolMetadata(dataSource).getValidationQuery()); } private DataSource createDataSource(int minSize, int maxSize) { From 69107cb1df70247a0b04b79e9989b5efcce52881 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 1 Sep 2014 11:11:54 -0700 Subject: [PATCH 5/8] Create metadata sub-package Create `org.springframework.boot.autoconfigure.jdbc.metadata` package and move DataSourcePoolMetadata classes. --- .../autoconfigure/DataSourceMetricsAutoConfiguration.java | 4 ++-- .../autoconfigure/HealthIndicatorAutoConfiguration.java | 6 +++--- .../boot/actuate/endpoint/DataSourcePublicMetrics.java | 6 +++--- .../HealthIndicatorAutoConfigurationTests.java | 2 +- .../jdbc/{ => metadata}/AbstractDataSourcePoolMetadata.java | 2 +- .../{ => metadata}/CommonsDbcpDataSourcePoolMetadata.java | 2 +- .../CompositeDataSourcePoolMetadataProvider.java | 2 +- .../jdbc/{ => metadata}/DataSourcePoolMetadata.java | 2 +- .../jdbc/{ => metadata}/DataSourcePoolMetadataProvider.java | 2 +- .../DataSourcePoolMetadataProvidersConfiguration.java | 2 +- .../jdbc/{ => metadata}/HikariDataSourcePoolMetadata.java | 2 +- .../jdbc/{ => metadata}/TomcatDataSourcePoolMetadata.java | 2 +- .../{ => metadata}/AbstractDataSourcePoolMetadataTests.java | 3 ++- .../CommonsDbcpDataSourcePoolMetadataTests.java | 4 +++- .../CompositeDataSourceMetadataProviderTests.java | 5 ++++- .../{ => metadata}/HikariDataSourcePoolMetadataTests.java | 3 ++- .../{ => metadata}/TomcatDataSourcePoolMetadataTests.java | 3 ++- 17 files changed, 30 insertions(+), 22 deletions(-) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/AbstractDataSourcePoolMetadata.java (95%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/CommonsDbcpDataSourcePoolMetadata.java (95%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/CompositeDataSourcePoolMetadataProvider.java (97%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/DataSourcePoolMetadata.java (97%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/DataSourcePoolMetadataProvider.java (94%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/DataSourcePoolMetadataProvidersConfiguration.java (97%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/HikariDataSourcePoolMetadata.java (96%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/TomcatDataSourcePoolMetadata.java (95%) rename spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/AbstractDataSourcePoolMetadataTests.java (96%) rename spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/CommonsDbcpDataSourcePoolMetadataTests.java (91%) rename spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/CompositeDataSourceMetadataProviderTests.java (88%) rename spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/HikariDataSourcePoolMetadataTests.java (92%) rename spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/{ => metadata}/TomcatDataSourcePoolMetadataTests.java (92%) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java index f675b6a591..2ccc81382e 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java @@ -24,8 +24,8 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadataProvider; -import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadataProvidersConfiguration; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java index 903de26df2..526c39ec8f 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java @@ -44,10 +44,10 @@ import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.jdbc.CompositeDataSourcePoolMetadataProvider; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadataProvider; -import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadata; +import org.springframework.boot.autoconfigure.jdbc.metadata.CompositeDataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoDataAutoConfiguration; import org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java index 786a078d56..361f14767a 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java @@ -28,9 +28,9 @@ import javax.sql.DataSource; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.autoconfigure.jdbc.CompositeDataSourcePoolMetadataProvider; -import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadata; -import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.metadata.CompositeDataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Primary; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfigurationTests.java index 3ee929c98f..ff1b2d4464 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfigurationTests.java @@ -33,9 +33,9 @@ import org.springframework.boot.actuate.health.ApplicationHealthIndicator; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; -import org.springframework.boot.autoconfigure.jdbc.DataSourcePoolMetadataProvidersConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoDataAutoConfiguration; import org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadata.java similarity index 95% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadata.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadata.java index f356e165c6..c0f271d3af 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadata.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import javax.sql.DataSource; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourcePoolMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadata.java similarity index 95% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourcePoolMetadata.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadata.java index ae735730f9..963564d5bf 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourcePoolMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadata.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import javax.sql.DataSource; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourcePoolMetadataProvider.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourcePoolMetadataProvider.java similarity index 97% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourcePoolMetadataProvider.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourcePoolMetadataProvider.java index 5f0de67da5..cbb06584d3 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourcePoolMetadataProvider.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourcePoolMetadataProvider.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import java.util.ArrayList; import java.util.Collection; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadata.java similarity index 97% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadata.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadata.java index 18c3d8d0e5..d75cd041f4 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadata.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import javax.sql.DataSource; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvider.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvider.java similarity index 94% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvider.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvider.java index 49fe295a1c..95faec8c23 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvider.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvider.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import javax.sql.DataSource; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvidersConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java similarity index 97% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvidersConfiguration.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java index 92646ef0dc..28352ff655 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePoolMetadataProvidersConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import javax.sql.DataSource; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadata.java similarity index 96% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadata.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadata.java index 4812e44a1f..c656249d4a 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadata.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import javax.sql.DataSource; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadata.java similarity index 95% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadata.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadata.java index 87f7f3e23c..6b69b54dd6 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadata.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import org.apache.tomcat.jdbc.pool.ConnectionPool; import org.apache.tomcat.jdbc.pool.DataSource; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java similarity index 96% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadataTests.java rename to spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java index 3e158ea74e..6c3c481af1 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourcePoolMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java @@ -14,12 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import java.sql.Connection; import java.sql.SQLException; import org.junit.Test; +import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.ConnectionCallback; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourcePoolMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadataTests.java similarity index 91% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourcePoolMetadataTests.java rename to spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadataTests.java index 6b89dea8e5..db3db0e18d 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourcePoolMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadataTests.java @@ -14,11 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import org.apache.commons.dbcp.BasicDataSource; import org.junit.Before; import org.junit.Test; +import org.springframework.boot.autoconfigure.jdbc.metadata.CommonsDbcpDataSourcePoolMetadata; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourceMetadataProviderTests.java similarity index 88% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java rename to spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourceMetadataProviderTests.java index bc50567397..6f05901d27 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourceMetadataProviderTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import java.util.Arrays; @@ -24,6 +24,9 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.springframework.boot.autoconfigure.jdbc.metadata.CompositeDataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadataTests.java similarity index 92% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadataTests.java rename to spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadataTests.java index 7855e8b2b9..fabfb4295a 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourcePoolMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadataTests.java @@ -14,9 +14,10 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import org.junit.Before; +import org.springframework.boot.autoconfigure.jdbc.metadata.HikariDataSourcePoolMetadata; import com.zaxxer.hikari.HikariDataSource; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java similarity index 92% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadataTests.java rename to spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java index 287d069ca5..86b7a27ac2 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourcePoolMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java @@ -14,10 +14,11 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.autoconfigure.jdbc.metadata; import org.apache.tomcat.jdbc.pool.DataSource; import org.junit.Before; +import org.springframework.boot.autoconfigure.jdbc.metadata.TomcatDataSourcePoolMetadata; import static org.junit.Assert.assertEquals; From a512bcf7662e28c716f1dcaa33036d04e34e63c2 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 1 Sep 2014 11:26:05 -0700 Subject: [PATCH 6/8] Always auto-configure pool metadata providers Import DataSourcePoolMetadataProvidersConfiguration from DataSourceAutoConfiguration so that PoolMetadataProviders are configured even if actuator is not used. --- .../autoconfigure/DataSourceMetricsAutoConfiguration.java | 3 --- .../DataSourceMetricsAutoConfigurationTests.java | 4 +++- .../boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java index 2ccc81382e..4c88f7e501 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfiguration.java @@ -25,9 +25,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Import; /** * {@link EnableAutoConfiguration Auto-configuration} that provides metrics on dataSource @@ -38,7 +36,6 @@ import org.springframework.context.annotation.Import; */ @ConditionalOnBean(DataSource.class) @AutoConfigureAfter(DataSourceAutoConfiguration.class) -@Import(DataSourcePoolMetadataProvidersConfiguration.class) public class DataSourceMetricsAutoConfiguration { @Bean diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfigurationTests.java index 54999b3b7e..c627e68fb3 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/DataSourceMetricsAutoConfigurationTests.java @@ -32,6 +32,7 @@ import org.springframework.boot.actuate.endpoint.PublicMetrics; import org.springframework.boot.actuate.metrics.Metric; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -136,7 +137,8 @@ public class DataSourceMetricsAutoConfigurationTests { if (config.length > 0) { this.context.register(config); } - this.context.register(DataSourceMetricsAutoConfiguration.class); + this.context.register(DataSourcePoolMetadataProvidersConfiguration.class, + DataSourceMetricsAutoConfiguration.class); this.context.refresh(); } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java index 5a68991a21..981397d438 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java @@ -30,6 +30,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.SpringBootCondition; import org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerPostProcessor.Registrar; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -54,7 +55,7 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; @Configuration @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) @EnableConfigurationProperties(DataSourceProperties.class) -@Import(Registrar.class) +@Import({ Registrar.class, DataSourcePoolMetadataProvidersConfiguration.class }) public class DataSourceAutoConfiguration { /** From 4c8d35db43cf4ec538753b8ae5bbd7c0f8de5fa1 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 1 Sep 2014 11:38:42 -0700 Subject: [PATCH 7/8] Rename CompositeDataSourcePoolMetadataProvider Rename CompositeDataSourcePoolMetadataProvider to DataSourcePoolMetadataProviders. --- .../HealthIndicatorAutoConfiguration.java | 16 ++++++------- .../endpoint/DataSourcePublicMetrics.java | 4 ++-- ...a => DataSourcePoolMetadataProviders.java} | 23 ++++--------------- ...DataSourcePoolMetadataProvidersTests.java} | 21 ++++------------- 4 files changed, 20 insertions(+), 44 deletions(-) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/{CompositeDataSourcePoolMetadataProvider.java => DataSourcePoolMetadataProviders.java} (67%) rename spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/{CompositeDataSourceMetadataProviderTests.java => DataSourcePoolMetadataProvidersTests.java} (68%) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java index 526c39ec8f..c6885e11d4 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java @@ -45,9 +45,9 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.metadata.CompositeDataSourcePoolMetadataProvider; import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProviders; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoDataAutoConfiguration; import org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration; @@ -109,19 +109,19 @@ public class HealthIndicatorAutoConfiguration { @Bean @ConditionalOnMissingBean(name = "dbHealthIndicator") public HealthIndicator dbHealthIndicator() { - DataSourcePoolMetadataProvider metadataProvider = new CompositeDataSourcePoolMetadataProvider( + DataSourcePoolMetadataProvider metadataProvider = new DataSourcePoolMetadataProviders( this.metadataProviders); if (this.dataSources.size() == 1) { - return createDataSourceHealthIndicator(metadataProvider, this.dataSources - .values().iterator().next()); + DataSource dataSource = this.dataSources.values().iterator().next(); + return createDataSourceHealthIndicator(metadataProvider, dataSource); } CompositeHealthIndicator composite = new CompositeHealthIndicator( this.healthAggregator); for (Map.Entry entry : this.dataSources.entrySet()) { - composite.addHealthIndicator( - entry.getKey(), - createDataSourceHealthIndicator(metadataProvider, - entry.getValue())); + String name = entry.getKey(); + DataSource dataSource = entry.getValue(); + composite.addHealthIndicator(name, + createDataSourceHealthIndicator(metadataProvider, dataSource)); } return composite; } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java index 361f14767a..a2f3f4b431 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java @@ -28,7 +28,7 @@ import javax.sql.DataSource; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.autoconfigure.jdbc.metadata.CompositeDataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProviders; import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; import org.springframework.context.ApplicationContext; @@ -55,7 +55,7 @@ public class DataSourcePublicMetrics implements PublicMetrics { @PostConstruct public void initialize() { DataSource primaryDataSource = getPrimaryDataSource(); - DataSourcePoolMetadataProvider provider = new CompositeDataSourcePoolMetadataProvider( + DataSourcePoolMetadataProvider provider = new DataSourcePoolMetadataProviders( this.providers); for (Map.Entry entry : this.applicationContext .getBeansOfType(DataSource.class).entrySet()) { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourcePoolMetadataProvider.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProviders.java similarity index 67% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourcePoolMetadataProvider.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProviders.java index cbb06584d3..875ff14dd7 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourcePoolMetadataProvider.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProviders.java @@ -29,22 +29,15 @@ import javax.sql.DataSource; * @author Stephane Nicoll * @since 1.2.0 */ -public class CompositeDataSourcePoolMetadataProvider implements DataSourcePoolMetadataProvider { +public class DataSourcePoolMetadataProviders implements DataSourcePoolMetadataProvider { private final List providers; /** - * Create a {@link CompositeDataSourcePoolMetadataProvider} instance with no delegate. - */ - public CompositeDataSourcePoolMetadataProvider() { - this(new ArrayList()); - } - - /** - * Create a {@link CompositeDataSourcePoolMetadataProvider} instance with an initial + * Create a {@link DataSourcePoolMetadataProviders} instance with an initial * collection of delegates to use. */ - public CompositeDataSourcePoolMetadataProvider( + public DataSourcePoolMetadataProviders( Collection providers) { this.providers = new ArrayList(providers); } @@ -52,7 +45,8 @@ public class CompositeDataSourcePoolMetadataProvider implements DataSourcePoolMe @Override public DataSourcePoolMetadata getDataSourcePoolMetadata(DataSource dataSource) { for (DataSourcePoolMetadataProvider provider : this.providers) { - DataSourcePoolMetadata metadata = provider.getDataSourcePoolMetadata(dataSource); + DataSourcePoolMetadata metadata = provider + .getDataSourcePoolMetadata(dataSource); if (metadata != null) { return metadata; } @@ -60,11 +54,4 @@ public class CompositeDataSourcePoolMetadataProvider implements DataSourcePoolMe return null; } - /** - * Add a {@link DataSourcePoolMetadataProvider} delegate to the list. - */ - public void addDataSourceMetadataProvider(DataSourcePoolMetadataProvider provider) { - this.providers.add(provider); - } - } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourceMetadataProviderTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersTests.java similarity index 68% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourceMetadataProviderTests.java rename to spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersTests.java index 6f05901d27..6fd985cbf9 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CompositeDataSourceMetadataProviderTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersTests.java @@ -24,20 +24,17 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.springframework.boot.autoconfigure.jdbc.metadata.CompositeDataSourcePoolMetadataProvider; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.mockito.BDDMockito.given; /** - * Tests for {@link CompositeDataSourcePoolMetadataProvider}. + * Tests for {@link DataSourcePoolMetadataProviders}. * * @author Stephane Nicoll */ -public class CompositeDataSourceMetadataProviderTests { +public class DataSourcePoolMetadataProvidersTests { @Mock private DataSourcePoolMetadataProvider firstProvider; @@ -63,27 +60,19 @@ public class CompositeDataSourceMetadataProviderTests { @Before public void setup() { MockitoAnnotations.initMocks(this); - given(this.firstProvider.getDataSourcePoolMetadata(this.firstDataSource)).willReturn( - this.first); + given(this.firstProvider.getDataSourcePoolMetadata(this.firstDataSource)) + .willReturn(this.first); given(this.firstProvider.getDataSourcePoolMetadata(this.secondDataSource)) .willReturn(this.second); } @Test public void createWithProviders() { - CompositeDataSourcePoolMetadataProvider provider = new CompositeDataSourcePoolMetadataProvider( + DataSourcePoolMetadataProviders provider = new DataSourcePoolMetadataProviders( Arrays.asList(this.firstProvider, this.secondProvider)); assertSame(this.first, provider.getDataSourcePoolMetadata(this.firstDataSource)); assertSame(this.second, provider.getDataSourcePoolMetadata(this.secondDataSource)); assertNull(provider.getDataSourcePoolMetadata(this.unknownDataSource)); } - @Test - public void addProvider() { - CompositeDataSourcePoolMetadataProvider provider = new CompositeDataSourcePoolMetadataProvider(); - assertNull(provider.getDataSourcePoolMetadata(this.firstDataSource)); - provider.addDataSourceMetadataProvider(this.firstProvider); - assertSame(this.first, provider.getDataSourcePoolMetadata(this.firstDataSource)); - } - } From 5001b038cbc5488127b8048e7ad312abf3b7bfe5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 1 Sep 2014 11:59:36 -0700 Subject: [PATCH 8/8] Expose additional pool metrics Expose `max` and `min`, alongside the existing `active` and `usage` metrics. --- .../endpoint/DataSourcePublicMetrics.java | 13 ++++--- .../asciidoc/production-ready-features.adoc | 35 ++++++++++++------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java index a2f3f4b431..029ee37ae8 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java @@ -28,9 +28,9 @@ import javax.sql.DataSource; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProviders; import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProviders; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Primary; @@ -62,7 +62,8 @@ public class DataSourcePublicMetrics implements PublicMetrics { String beanName = entry.getKey(); DataSource bean = entry.getValue(); String prefix = createPrefix(beanName, bean, bean.equals(primaryDataSource)); - DataSourcePoolMetadata poolMetadata = provider.getDataSourcePoolMetadata(bean); + DataSourcePoolMetadata poolMetadata = provider + .getDataSourcePoolMetadata(bean); if (poolMetadata != null) { this.metadataByPrefix.put(prefix, poolMetadata); } @@ -76,9 +77,11 @@ public class DataSourcePublicMetrics implements PublicMetrics { .entrySet()) { String prefix = entry.getKey(); prefix = (prefix.endsWith(".") ? prefix : prefix + "."); - DataSourcePoolMetadata dataSourceMetadata = entry.getValue(); - addMetric(metrics, prefix + "active", dataSourceMetadata.getActive()); - addMetric(metrics, prefix + "usage", dataSourceMetadata.getUsage()); + DataSourcePoolMetadata metadata = entry.getValue(); + addMetric(metrics, prefix + "max", metadata.getMax()); + addMetric(metrics, prefix + "min", metadata.getMin()); + addMetric(metrics, prefix + "active", metadata.getActive()); + addMetric(metrics, prefix + "usage", metadata.getUsage()); } return metrics; } diff --git a/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc b/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc index aeb26bbe8c..334f27a879 100644 --- a/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc +++ b/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc @@ -634,26 +634,35 @@ The `gauge` shows the last response time for a request. So the last request to ` NOTE: In this example we are actually accessing the endpoint over HTTP using the `/metrics` URL, this explains why `metrics` appears in the response. + + [[production-ready-datasource-metrics]] === DataSource metrics +The following metrics are exposed for each supported `DataSource` defined in your +application: -The following metrics are available for each data source defined in the application: the -number of allocated connection(s) (`.active`) and the current usage of the connection -pool (`.usage`). +* The maximum number connections (`datasource.xxx.max`). +* The minimum number of connections (`datasource.xxx.min`). +* The number of active connections (`datasource.xxx.active`) +* The current usage of the connection pool (`datasource.xxx.usage`). -All data source metrics share the `datasource.` prefix. The prefix is further qualified for -each data source: +All data source metrics share the `datasource.` prefix. The prefix is further qualified +for each data source: * If the data source is the primary data source (that is either the only available data - source or the one flagged `@Primary` amongst the existing ones), the prefix is `datasource.primary` -* If the data source bean name ends with `dataSource`, the prefix is the name of the bean without - it (i.e. `datasource.batch` for `batchDataSource`) -* In all other cases, the name of the bean is used + source or the one flagged `@Primary` amongst the existing ones), the prefix is + `datasource.primary`. +* If the data source bean name ends with `dataSource`, the prefix is the name of the bean + without `dataSource` (i.e. `datasource.batch` for `batchDataSource`). +* In all other cases, the name of the bean is used. + +It is possible to override part or all of those defaults by registering a bean with a +customized version of `DataSourcePublicMetrics`. By default, Spring Boot provides metadata +for all supported datasources; you can add additional `DataSourcePoolMetadataProvider` +beans if your favorite data source isn't supported out of the box. See +`DataSourcePoolMetadataProvidersConfiguration` for examples. + -It is possible to override part or all of those defaults by registering a bean with a customized -version of `DataSourcePublicMetrics`. Spring Boot provides those metadata for all supported -datasource; you can provide a `DataSourceMetadata` implementation for your favorite data source, -check `DatasourceMetadataProvidersConfiguration` for more details. [[production-ready-recording-metrics]] === Recording your own metrics