From 05930a4e735236a5eac82d9d731e019f476bf19c Mon Sep 17 00:00:00 2001 From: Scott Frederick Date: Thu, 19 Nov 2015 17:35:07 -0600 Subject: [PATCH] Change order of DataSource selection to match Spring Boot. --- .../service/relational/DataSourceCreator.java | 4 +- .../cloud/ReflectionUtils.java | 21 +++++++ .../CommonPoolCloudConfigTestHelper.java | 16 +---- .../DataSourceCloudConfigTestHelper.java | 4 +- .../config/java/DataSourceJavaConfigTest.java | 11 +++- .../config/xml/DataSourceXmlConfigTest.java | 2 - .../AbstractDataSourceCreatorTest.java | 27 +++++--- .../PooledDataSourceCreatorsTest.java | 62 +++++++++++-------- .../xml/cloud-datasource-with-config.xml | 6 ++ 9 files changed, 97 insertions(+), 56 deletions(-) create mode 100644 spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/ReflectionUtils.java diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceCreator.java index b5fb936..4a36040 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceCreator.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceCreator.java @@ -40,10 +40,10 @@ public abstract class DataSourceCreator extend this.validationQuery = validationQuery; if (pooledDataSourceCreators.size() == 0) { - putPooledDataSourceCreator(new BasicDbcpPooledDataSourceCreator()); - putPooledDataSourceCreator(new TomcatDbcpPooledDataSourceCreator()); putPooledDataSourceCreator(new TomcatJdbcPooledDataSourceCreator()); putPooledDataSourceCreator(new HikariCpPooledDataSourceCreator()); + putPooledDataSourceCreator(new TomcatDbcpPooledDataSourceCreator()); + putPooledDataSourceCreator(new BasicDbcpPooledDataSourceCreator()); } } diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/ReflectionUtils.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/ReflectionUtils.java new file mode 100644 index 0000000..3fa0211 --- /dev/null +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/ReflectionUtils.java @@ -0,0 +1,21 @@ +package org.springframework.cloud; + +import org.springframework.test.util.ReflectionTestUtils; + +public class ReflectionUtils { + @SuppressWarnings("EmptyCatchBlock") + public static Object getValue(Object target, String... fieldNames) { + for (String fieldName : fieldNames) { + try { + return ReflectionTestUtils.invokeGetterMethod(target, fieldName); + } catch (IllegalArgumentException e1) { + try { + return ReflectionTestUtils.getField(target, fieldName); + } catch (IllegalArgumentException e2) { + } + } + } + + return null; + } +} \ No newline at end of file diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/CommonPoolCloudConfigTestHelper.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/CommonPoolCloudConfigTestHelper.java index ca6f5f8..5b7b49c 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/CommonPoolCloudConfigTestHelper.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/CommonPoolCloudConfigTestHelper.java @@ -1,25 +1,13 @@ package org.springframework.cloud.config; import static org.junit.Assert.assertEquals; - -import org.springframework.test.util.ReflectionTestUtils; +import static org.springframework.cloud.ReflectionUtils.getValue; public class CommonPoolCloudConfigTestHelper { public static void assertCommonsPoolProperties(Object pool, int maxActive, int minIdle, long maxWait) { assertEquals(maxActive, getValue(pool, "maxActive", "maxTotal")); assertEquals(minIdle, getValue(pool, "minIdle")); - assertEquals(maxWait, getValue(pool, "maxWait", "maxWaitMillis")); + assertEquals(maxWait, (long) Long.valueOf(getValue(pool, "maxWait", "maxWaitMillis").toString())); } - - protected static Object getValue(Object object, String... fieldNames) { - for (String fieldName : fieldNames) { - try { - return ReflectionTestUtils.getField(object, fieldName); - } catch (IllegalArgumentException ex) { - } - } - return null; - } - } diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java index 1f70798..626cca2 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java @@ -6,7 +6,7 @@ import java.util.Properties; import javax.sql.DataSource; -import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.cloud.ReflectionUtils; /** * @@ -20,6 +20,6 @@ public class DataSourceCloudConfigTestHelper extends CommonPoolCloudConfigTestHe } public static void assertConnectionProperties(DataSource dataSource, Properties connectionProp) { - assertEquals(connectionProp, ReflectionTestUtils.getField(dataSource, "connectionProperties")); + assertEquals(connectionProp, ReflectionUtils.getValue(dataSource, "connectionProperties")); } } diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigTest.java index 7ce02b9..1143eeb 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigTest.java @@ -1,5 +1,7 @@ package org.springframework.cloud.config.java; +import java.util.Collections; +import java.util.List; import java.util.Properties; import javax.sql.DataSource; @@ -8,6 +10,7 @@ import org.junit.Test; import org.springframework.beans.factory.BeanCreationException; import org.springframework.cloud.config.DataSourceCloudConfigTestHelper; import org.springframework.cloud.service.PooledServiceConnectorConfig.PoolConfig; +import org.springframework.cloud.service.relational.BasicDbcpPooledDataSourceCreator; import org.springframework.cloud.service.relational.DataSourceConfig; import org.springframework.cloud.service.relational.DataSourceConfig.ConnectionConfig; import org.springframework.context.ApplicationContext; @@ -90,14 +93,18 @@ class DatasourceConfigWithServiceConfig extends AbstractCloudConfig { public DataSource dbPool20Wait200() { // use this name so that we have a case with default name PoolConfig poolConfig = new PoolConfig(20, 200); ConnectionConfig connectionConfig = new ConnectionConfig("sessionVariables=sql_mode='ANSI';characterEncoding=UTF-8"); - DataSourceConfig serviceConfig = new DataSourceConfig(poolConfig, connectionConfig); + DataSourceConfig serviceConfig = new DataSourceConfig(poolConfig, connectionConfig, basicDbcpConnectionPool()); return connectionFactory().dataSource("my-service", serviceConfig); } @Bean public DataSource dbPool5_20Wait3000() { // use this name so that we have a case with default name PoolConfig poolConfig = new PoolConfig(5, 30, 3000); - DataSourceConfig serviceConfig = new DataSourceConfig(poolConfig, null); + DataSourceConfig serviceConfig = new DataSourceConfig(poolConfig, null, basicDbcpConnectionPool()); return connectionFactory().dataSource("my-service", serviceConfig); } + + private List basicDbcpConnectionPool() { + return Collections.singletonList(BasicDbcpPooledDataSourceCreator.class.getSimpleName()); + } } \ No newline at end of file diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigTest.java index 8bbe1c1..2c7c4c5 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigTest.java @@ -8,7 +8,6 @@ import org.junit.Test; import org.springframework.beans.factory.BeanCreationException; import org.springframework.cloud.config.DataSourceCloudConfigTestHelper; import org.springframework.cloud.service.ServiceInfo; -import org.springframework.cloud.service.relational.BasicDbcpPooledDataSourceCreator; import org.springframework.cloud.service.relational.HikariCpPooledDataSourceCreator; import org.springframework.cloud.service.relational.TomcatJdbcPooledDataSourceCreator; import org.springframework.context.ApplicationContext; @@ -61,7 +60,6 @@ public abstract class DataSourceXmlConfigTest extends AbstractServiceXmlConfigTe createService("my-service")); DataSource ds = testContext.getBean("db-pool20-wait200", getConnectorType()); - assertThat(ds, instanceOf(Class.forName(BasicDbcpPooledDataSourceCreator.DBCP2_BASIC_DATASOURCE))); DataSourceCloudConfigTestHelper.assertPoolProperties(ds, 20, 0, 200); Properties connectionProp = new Properties(); diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/AbstractDataSourceCreatorTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/AbstractDataSourceCreatorTest.java index 45d4a52..51bf5e7 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/AbstractDataSourceCreatorTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/AbstractDataSourceCreatorTest.java @@ -4,11 +4,14 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import java.util.Collections; +import java.util.List; import java.util.Properties; import javax.sql.DataSource; import org.junit.Test; +import org.springframework.cloud.ReflectionUtils; import org.springframework.cloud.config.DataSourceCloudConfigTestHelper; import org.springframework.cloud.service.PooledServiceConnectorConfig.PoolConfig; import org.springframework.cloud.service.common.RelationalServiceInfo; @@ -30,7 +33,9 @@ public abstract class AbstractDataSourceCreatorTest pooledDataSource = Collections.singletonList(BasicDbcpPooledDataSourceCreator.class.getSimpleName()); + DataSourceConfig config = new DataSourceConfig(pooledDataSource); + DataSource dataSource = getCreator().create(relationalServiceInfo, config); assertDataSourceProperties(relationalServiceInfo, dataSource); } @@ -39,7 +44,10 @@ public abstract class AbstractDataSourceCreatorTest pooledDataSource = Collections.singletonList(BasicDbcpPooledDataSourceCreator.class.getSimpleName()); + DataSourceConfig config = new DataSourceConfig(poolConfig, connectionConfig, pooledDataSource); DataSource dataSource = getCreator().create(relationalServiceInfo, config); assertDataSourceProperties(relationalServiceInfo, dataSource); @@ -57,11 +65,16 @@ public abstract class AbstractDataSourceCreatorTest + + BasicDbcp + + + BasicDbcp +