Support dbcp2 (and thus commons-pool2) in addition to dbcp1

This commit is contained in:
Ramnivas Laddad
2014-03-10 12:55:28 -07:00
parent 9c53b2262e
commit a3e3335d00
7 changed files with 44 additions and 25 deletions

View File

@@ -18,6 +18,7 @@ ext {
jedisVersion = "2.4.1"
commonDbcpVersion = "1.3"
commonDbcp2Version = "2.0"
mysqlDriverVersion = "5.0.5"
mariadbDriverVersion = "1.1.3"

View File

@@ -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')

View File

@@ -23,6 +23,11 @@ public class BasicDbcpPooledDataSourceCreator<SI extends RelationalServiceInfo>
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;
}

View File

@@ -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;
}
}

View File

@@ -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) {

View File

@@ -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;
}
}

View File

@@ -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<C extends DataSourceCreator<
DataSource dataSource = getCreator().create(relationalServiceInfo, config);
assertDataSourceProperties(relationalServiceInfo, dataSource);
assertPoolProperties(dataSource, 5, 0, 100);
DataSourceCloudConfigTestHelper.assertPoolProperties(dataSource, 5, 0, 100);
Properties connectionProp = new Properties();
connectionProp.put("foo", "bar");
@@ -63,9 +64,4 @@ public abstract class AbstractDataSourceCreatorTest<C extends DataSourceCreator<
assertTrue(((String) ReflectionTestUtils.invokeGetterMethod(dataSource, "validationQuery")).startsWith(getValidationQueryStart()));
}
private 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"));
}
}