Support tomcat 7 and tomcat 8 datasource connection pooling.
This commit is contained in:
@@ -190,7 +190,9 @@ ext {
|
||||
"amqp12" : [springAmqpVersion: "1.2.2.RELEASE"],
|
||||
"amqp13" : [springAmqpVersion: "1.3.6.RELEASE"],
|
||||
"spring32" : [springVersion: "3.2.9.RELEASE"],
|
||||
"spring40" : [springVersion: "4.0.5.RELEASE"]
|
||||
"spring40" : [springVersion: "4.0.5.RELEASE"],
|
||||
"tomcat7" : [tomcatVersion: "7.0.53"],
|
||||
"tomcat8" : [tomcatVersion: "8.0.24"],
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import static org.springframework.cloud.service.Util.hasClass;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.springframework.cloud.service.ServiceConnectorConfig;
|
||||
import org.springframework.cloud.service.ServiceConnectorCreationException;
|
||||
import org.springframework.cloud.service.common.RelationalServiceInfo;
|
||||
|
||||
/**
|
||||
@@ -15,17 +16,32 @@ import org.springframework.cloud.service.common.RelationalServiceInfo;
|
||||
*/
|
||||
public class TomcatDbcpPooledDataSourceCreator<SI extends RelationalServiceInfo> extends DbcpLikePooledDataSourceCreator<SI> {
|
||||
|
||||
public static final String TOMCAT_7_DBCP = "org.apache.tomcat.dbcp.dbcp.BasicDataSource";
|
||||
public static final String TOMCAT_8_DBCP = "org.apache.tomcat.dbcp.dbcp2.BasicDataSource";
|
||||
|
||||
@Override
|
||||
public DataSource create(RelationalServiceInfo serviceInfo, ServiceConnectorConfig serviceConnectorConfig,
|
||||
String driverClassName, String validationQuery) {
|
||||
if (hasClass("org.apache.tomcat.dbcp.dbcp.BasicDataSource")) {
|
||||
logger.info("Found Tomcat dbcp connection pool on the classpath. Using it for DataSource connection pooling.");
|
||||
org.apache.tomcat.dbcp.dbcp.BasicDataSource ds = new org.apache.tomcat.dbcp.dbcp.BasicDataSource();
|
||||
setBasicDataSourceProperties(ds, serviceInfo, serviceConnectorConfig, driverClassName, validationQuery);
|
||||
return ds;
|
||||
if (hasClass(TOMCAT_7_DBCP)) {
|
||||
logger.info("Found Tomcat 7 dbcp connection pool on the classpath. Using it for DataSource connection pooling.");
|
||||
return createDataSource(TOMCAT_7_DBCP, serviceInfo, serviceConnectorConfig, driverClassName, validationQuery);
|
||||
} else if (hasClass(TOMCAT_8_DBCP)) {
|
||||
logger.info("Found Tomcat 8 dbcp connection pool on the classpath. Using it for DataSource connection pooling.");
|
||||
return createDataSource(TOMCAT_8_DBCP, serviceInfo, serviceConnectorConfig, driverClassName, validationQuery);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private DataSource createDataSource(String className, RelationalServiceInfo serviceInfo,
|
||||
ServiceConnectorConfig serviceConnectorConfig,
|
||||
String driverClassName, String validationQuery) {
|
||||
try {
|
||||
DataSource dataSource = (DataSource) Class.forName(className).newInstance();
|
||||
setBasicDataSourceProperties(dataSource, serviceInfo, serviceConnectorConfig, driverClassName, validationQuery);
|
||||
return dataSource;
|
||||
} catch (Throwable e) {
|
||||
throw new ServiceConnectorCreationException("Error instantiating Tomcat dbcp connection pool", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,13 @@ import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.cloud.service.common.MysqlServiceInfo;
|
||||
|
||||
import static org.hamcrest.core.IsInstanceOf.instanceOf;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.springframework.cloud.service.Util.hasClass;
|
||||
import static org.springframework.cloud.service.relational.TomcatDbcpPooledDataSourceCreator.TOMCAT_7_DBCP;
|
||||
import static org.springframework.cloud.service.relational.TomcatDbcpPooledDataSourceCreator.TOMCAT_8_DBCP;
|
||||
|
||||
public class PooledDataSourceCreatorsTest {
|
||||
@Mock private MysqlServiceInfo mockMysqlServiceInfo;
|
||||
|
||||
@@ -26,8 +33,16 @@ public class PooledDataSourceCreatorsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pooledDataSourceCreationTomcatDbcp() {
|
||||
assertPooledDataSource(new TomcatDbcpPooledDataSourceCreator<MysqlServiceInfo>());
|
||||
public void pooledDataSourceCreationTomcatDbcp() throws Exception {
|
||||
DataSource ds = assertPooledDataSource(new TomcatDbcpPooledDataSourceCreator<MysqlServiceInfo>());
|
||||
assertTrue(hasClass(TOMCAT_7_DBCP) || hasClass(TOMCAT_8_DBCP));
|
||||
|
||||
if (hasClass(TOMCAT_7_DBCP)) {
|
||||
assertThat(ds, instanceOf(Class.forName(TOMCAT_7_DBCP)));
|
||||
}
|
||||
if (hasClass(TOMCAT_8_DBCP)) {
|
||||
assertThat(ds, instanceOf(Class.forName(TOMCAT_8_DBCP)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -40,12 +55,13 @@ public class PooledDataSourceCreatorsTest {
|
||||
assertPooledDataSource(new HikariCpPooledDataSourceCreator<MysqlServiceInfo>());
|
||||
}
|
||||
|
||||
private void assertPooledDataSource(PooledDataSourceCreator<MysqlServiceInfo> testCreator) {
|
||||
private DataSource assertPooledDataSource(PooledDataSourceCreator<MysqlServiceInfo> testCreator) {
|
||||
DataSource ds = testCreator.create(mockMysqlServiceInfo, null,
|
||||
mysqlDataSourceCreator.getDriverClassName(mockMysqlServiceInfo),
|
||||
"select 1");
|
||||
|
||||
Assert.assertNotNull("Failed to create datasource with " + testCreator.getClass().getSimpleName(), ds);
|
||||
|
||||
return ds;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user