diff --git a/build.gradle b/build.gradle index 1a881ae..6d5924a 100644 --- a/build.gradle +++ b/build.gradle @@ -18,6 +18,7 @@ ext { jedisVersion = "2.4.1" commonDbcpVersion = "1.3" + commonDbcp2Version = "2.0" mysqlDriverVersion = "5.0.5" mariadbDriverVersion = "1.1.3" diff --git a/spring-service-connector/build.gradle b/spring-service-connector/build.gradle index 3822eeb..496db94 100644 --- a/spring-service-connector/build.gradle +++ b/spring-service-connector/build.gradle @@ -18,6 +18,13 @@ dependencies { optional("org.springframework:spring-context-support:$springVersion") optional("org.apache.tomcat:tomcat-jdbc:$tomcatVersion") optional("org.apache.tomcat:tomcat-dbcp:$tomcatVersion") + optional("org.apache.commons:commons-dbcp2:$commonDbcp2Version") { + exclude(module: 'commons-logging') + exclude(module: 'commons-pool') + exclude(module: 'xerces') + exclude(module: 'xercesImpl') + exclude(module: 'xml-apis') + } optional("commons-dbcp:commons-dbcp:$commonDbcpVersion") { exclude(module: 'commons-logging') exclude(module: 'commons-pool') diff --git a/spring-service-connector/src/main/java/org/springframework/cloud/service/relational/BasicDbcpPooledDataSourceCreator.java b/spring-service-connector/src/main/java/org/springframework/cloud/service/relational/BasicDbcpPooledDataSourceCreator.java index 0b07963..8efcff6 100644 --- a/spring-service-connector/src/main/java/org/springframework/cloud/service/relational/BasicDbcpPooledDataSourceCreator.java +++ b/spring-service-connector/src/main/java/org/springframework/cloud/service/relational/BasicDbcpPooledDataSourceCreator.java @@ -23,6 +23,11 @@ public class BasicDbcpPooledDataSourceCreator org.apache.commons.dbcp.BasicDataSource ds = new org.apache.commons.dbcp.BasicDataSource(); setBasicDataSourceProperties(ds, serviceInfo, serviceConnectorConfig, driverClassName, validationQuery); return ds; + } else if (hasClass("org.apache.commons.dbcp2.BasicDataSource")) { + logger.info("Found DBCP on the classpath. Using it for DataSource connection pooling."); + org.apache.commons.dbcp2.BasicDataSource ds = new org.apache.commons.dbcp2.BasicDataSource(); + setBasicDataSourceProperties(ds, serviceInfo, serviceConnectorConfig, driverClassName, validationQuery); + return ds; } else { return null; } diff --git a/spring-service-connector/src/test/java/org/springframework/cloud/config/CommonPoolCloudConfigTestHelper.java b/spring-service-connector/src/test/java/org/springframework/cloud/config/CommonPoolCloudConfigTestHelper.java new file mode 100644 index 0000000..998a24f --- /dev/null +++ b/spring-service-connector/src/test/java/org/springframework/cloud/config/CommonPoolCloudConfigTestHelper.java @@ -0,0 +1,25 @@ +package org.springframework.cloud.config; + +import static org.junit.Assert.assertEquals; + +import org.springframework.test.util.ReflectionTestUtils; + +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")); + } + + 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-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java b/spring-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java index 606f4da..1f70798 100644 --- a/spring-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java +++ b/spring-service-connector/src/test/java/org/springframework/cloud/config/DataSourceCloudConfigTestHelper.java @@ -13,12 +13,10 @@ import org.springframework.test.util.ReflectionTestUtils; * @author Ramnivas Laddad * */ -public class DataSourceCloudConfigTestHelper { +public class DataSourceCloudConfigTestHelper extends CommonPoolCloudConfigTestHelper { public static void assertPoolProperties(DataSource dataSource, int maxActive, int minIdle, long maxWait) { - assertEquals(maxActive, ReflectionTestUtils.getField(dataSource, "maxActive")); - assertEquals(minIdle, ReflectionTestUtils.getField(dataSource, "minIdle")); - assertEquals(maxWait, ReflectionTestUtils.getField(dataSource, "maxWait")); + assertCommonsPoolProperties(dataSource, maxActive, minIdle, maxWait); } public static void assertConnectionProperties(DataSource dataSource, Properties connectionProp) { diff --git a/spring-service-connector/src/test/java/org/springframework/cloud/config/RedisConnectionFactoryCloudConfigTestHelper.java b/spring-service-connector/src/test/java/org/springframework/cloud/config/RedisConnectionFactoryCloudConfigTestHelper.java index 3cbeaa3..316b793 100644 --- a/spring-service-connector/src/test/java/org/springframework/cloud/config/RedisConnectionFactoryCloudConfigTestHelper.java +++ b/spring-service-connector/src/test/java/org/springframework/cloud/config/RedisConnectionFactoryCloudConfigTestHelper.java @@ -1,7 +1,5 @@ package org.springframework.cloud.config; -import static org.junit.Assert.assertEquals; - import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.test.util.ReflectionTestUtils; @@ -12,22 +10,11 @@ import redis.clients.jedis.JedisPoolConfig; * @author Ramnivas Laddad * */ -public class RedisConnectionFactoryCloudConfigTestHelper { +public class RedisConnectionFactoryCloudConfigTestHelper extends CommonPoolCloudConfigTestHelper { public static void assertPoolProperties(RedisConnectionFactory connector, int maxActive, int minIdle, long maxWait) { JedisPoolConfig poolConfig = (JedisPoolConfig) ReflectionTestUtils.getField(connector, "poolConfig"); - assertEquals(maxActive, getValue(poolConfig, "maxActive", "maxTotal")); - assertEquals(minIdle, getValue(poolConfig, "minIdle")); - assertEquals(maxWait, getValue(poolConfig, "maxWait", "maxWaitMillis")); + assertCommonsPoolProperties(poolConfig, maxActive, minIdle, maxWait); } - private 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-service-connector/src/test/java/org/springframework/cloud/service/relational/AbstractDataSourceCreatorTest.java b/spring-service-connector/src/test/java/org/springframework/cloud/service/relational/AbstractDataSourceCreatorTest.java index 8e27717..45d4a52 100644 --- a/spring-service-connector/src/test/java/org/springframework/cloud/service/relational/AbstractDataSourceCreatorTest.java +++ b/spring-service-connector/src/test/java/org/springframework/cloud/service/relational/AbstractDataSourceCreatorTest.java @@ -9,6 +9,7 @@ import java.util.Properties; import javax.sql.DataSource; import org.junit.Test; +import org.springframework.cloud.config.DataSourceCloudConfigTestHelper; import org.springframework.cloud.service.PooledServiceConnectorConfig.PoolConfig; import org.springframework.cloud.service.common.RelationalServiceInfo; import org.springframework.cloud.service.relational.DataSourceConfig.ConnectionConfig; @@ -42,7 +43,7 @@ public abstract class AbstractDataSourceCreatorTest