Change order of DataSource selection to match Spring Boot.
This commit is contained in:
@@ -40,10 +40,10 @@ public abstract class DataSourceCreator<SI extends RelationalServiceInfo> extend
|
||||
this.validationQuery = validationQuery;
|
||||
|
||||
if (pooledDataSourceCreators.size() == 0) {
|
||||
putPooledDataSourceCreator(new BasicDbcpPooledDataSourceCreator<SI>());
|
||||
putPooledDataSourceCreator(new TomcatDbcpPooledDataSourceCreator<SI>());
|
||||
putPooledDataSourceCreator(new TomcatJdbcPooledDataSourceCreator<SI>());
|
||||
putPooledDataSourceCreator(new HikariCpPooledDataSourceCreator<SI>());
|
||||
putPooledDataSourceCreator(new TomcatDbcpPooledDataSourceCreator<SI>());
|
||||
putPooledDataSourceCreator(new BasicDbcpPooledDataSourceCreator<SI>());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String> basicDbcpConnectionPool() {
|
||||
return Collections.singletonList(BasicDbcpPooledDataSourceCreator.class.getSimpleName());
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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<C extends DataSourceCreator<
|
||||
public void cloudDataSourceCreationNoConfig() throws Exception {
|
||||
SI relationalServiceInfo = createServiceInfo();
|
||||
|
||||
DataSource dataSource = getCreator().create(relationalServiceInfo, null);
|
||||
List<String> 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<C extends DataSourceCreator<
|
||||
public void cloudDataSourceCreationWithConfig() throws Exception {
|
||||
SI relationalServiceInfo = createServiceInfo();
|
||||
|
||||
DataSourceConfig config = new DataSourceConfig(new PoolConfig("5", 100), new ConnectionConfig("foo=bar"));
|
||||
PoolConfig poolConfig = new PoolConfig("5", 100);
|
||||
ConnectionConfig connectionConfig = new ConnectionConfig("foo=bar");
|
||||
List<String> 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<C extends DataSourceCreator<
|
||||
private void assertDataSourceProperties(RelationalServiceInfo relationalServiceInfo, DataSource dataSource) {
|
||||
assertNotNull(dataSource);
|
||||
|
||||
assertEquals(getDriverName(), ReflectionTestUtils.getField(dataSource, "driverClassName"));
|
||||
assertEquals(relationalServiceInfo.getJdbcUrl(), ReflectionTestUtils.getField(dataSource, "url"));
|
||||
assertTrue((Boolean) ReflectionTestUtils.invokeGetterMethod(dataSource, "testOnBorrow"));
|
||||
assertNotNull(ReflectionTestUtils.invokeGetterMethod(dataSource, "validationQuery"));
|
||||
assertTrue(((String) ReflectionTestUtils.invokeGetterMethod(dataSource, "validationQuery")).startsWith(getValidationQueryStart()));
|
||||
assertEquals(getDriverName(), ReflectionUtils.getValue(dataSource, "driverClassName"));
|
||||
assertEquals(relationalServiceInfo.getJdbcUrl(), ReflectionUtils.getValue(dataSource, "url"));
|
||||
|
||||
Object testOnBorrow = ReflectionUtils.getValue(dataSource, "testOnBorrow");
|
||||
assertNotNull(testOnBorrow);
|
||||
assertTrue(Boolean.valueOf(testOnBorrow.toString()));
|
||||
|
||||
Object validationQuery = ReflectionUtils.getValue(dataSource, "validationQuery");
|
||||
assertNotNull(validationQuery);
|
||||
assertTrue(validationQuery.toString().startsWith(getValidationQueryStart()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ public class PooledDataSourceCreatorsTest {
|
||||
@Test
|
||||
public void pooledDataSourceCreationDefault() throws Exception {
|
||||
DataSource ds = createMysqlDataSource(null);
|
||||
assertBasicDbcpDataSource(ds);
|
||||
assertTomcatJdbcDataSource(ds);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -50,17 +50,6 @@ public class PooledDataSourceCreatorsTest {
|
||||
assertBasicDbcpDataSource(ds);
|
||||
}
|
||||
|
||||
private void assertBasicDbcpDataSource(DataSource ds) throws ClassNotFoundException {
|
||||
assertTrue(hasClass(DBCP2_BASIC_DATASOURCE) || hasClass(DBCP_BASIC_DATASOURCE));
|
||||
|
||||
if (hasClass(DBCP2_BASIC_DATASOURCE)) {
|
||||
assertThat(ds, instanceOf(Class.forName(DBCP2_BASIC_DATASOURCE)));
|
||||
}
|
||||
if (hasClass(DBCP_BASIC_DATASOURCE) && !hasClass(DBCP2_BASIC_DATASOURCE)) {
|
||||
assertThat(ds, instanceOf(Class.forName(DBCP_BASIC_DATASOURCE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pooledDataSourceCreationTomcatDbcp() throws Exception {
|
||||
DataSource ds = createMysqlDataSourceWithPooledName("TomcatDbcp");
|
||||
@@ -70,33 +59,22 @@ public class PooledDataSourceCreatorsTest {
|
||||
assertTomcatDbcpDataSource(ds);
|
||||
}
|
||||
|
||||
private void assertTomcatDbcpDataSource(DataSource ds) throws ClassNotFoundException {
|
||||
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
|
||||
public void pooledDataSourceCreationTomcatJdbc() throws Exception {
|
||||
DataSource ds = createMysqlDataSourceWithPooledName("TomcatJdbc");
|
||||
assertThat(ds, instanceOf(Class.forName(TOMCAT_JDBC_DATASOURCE)));
|
||||
assertTomcatJdbcDataSource(ds);
|
||||
|
||||
ds = createMysqlDataSourceWithPooledName(TomcatJdbcPooledDataSourceCreator.class.getSimpleName());
|
||||
assertThat(ds, instanceOf(Class.forName(TOMCAT_JDBC_DATASOURCE)));
|
||||
assertTomcatJdbcDataSource(ds);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pooledDataSourceCreationHikariCP() throws Exception {
|
||||
DataSource ds = createMysqlDataSourceWithPooledName("HikariCp");
|
||||
assertThat(ds, instanceOf(Class.forName(HIKARI_DATASOURCE)));
|
||||
assertHikariDataSource(ds);
|
||||
|
||||
ds = createMysqlDataSourceWithPooledName(HikariCpPooledDataSourceCreator.class.getSimpleName());
|
||||
assertThat(ds, instanceOf(Class.forName(HIKARI_DATASOURCE)));
|
||||
assertHikariDataSource(ds);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -113,4 +91,34 @@ public class PooledDataSourceCreatorsTest {
|
||||
private DataSource createMysqlDataSource(ServiceConnectorConfig config) {
|
||||
return mysqlDataSourceCreator.create(mockMysqlServiceInfo, config);
|
||||
}
|
||||
|
||||
private void assertBasicDbcpDataSource(DataSource ds) throws ClassNotFoundException {
|
||||
assertTrue(hasClass(DBCP2_BASIC_DATASOURCE) || hasClass(DBCP_BASIC_DATASOURCE));
|
||||
|
||||
if (hasClass(DBCP2_BASIC_DATASOURCE)) {
|
||||
assertThat(ds, instanceOf(Class.forName(DBCP2_BASIC_DATASOURCE)));
|
||||
}
|
||||
if (hasClass(DBCP_BASIC_DATASOURCE) && !hasClass(DBCP2_BASIC_DATASOURCE)) {
|
||||
assertThat(ds, instanceOf(Class.forName(DBCP_BASIC_DATASOURCE)));
|
||||
}
|
||||
}
|
||||
|
||||
private void assertTomcatDbcpDataSource(DataSource ds) throws ClassNotFoundException {
|
||||
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)));
|
||||
}
|
||||
}
|
||||
|
||||
private void assertTomcatJdbcDataSource(DataSource ds) throws ClassNotFoundException {
|
||||
assertThat(ds, instanceOf(Class.forName(TOMCAT_JDBC_DATASOURCE)));
|
||||
}
|
||||
|
||||
private void assertHikariDataSource(DataSource ds) throws ClassNotFoundException {
|
||||
assertThat(ds, instanceOf(Class.forName(HIKARI_DATASOURCE)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,10 +8,16 @@
|
||||
<cloud:data-source id="db-pool20-wait200" service-name="my-service">
|
||||
<cloud:connection properties="sessionVariables=sql_mode='ANSI';characterEncoding=UTF-8"/>
|
||||
<cloud:pool pool-size="20" max-wait-time="200"/>
|
||||
<cloud:pool-data-sources>
|
||||
<value>BasicDbcp</value>
|
||||
</cloud:pool-data-sources>
|
||||
</cloud:data-source>
|
||||
|
||||
<cloud:data-source id="db-pool5-30-wait3000" service-name="my-service">
|
||||
<cloud:pool pool-size="5-30" max-wait-time="3000"/>
|
||||
<cloud:pool-data-sources>
|
||||
<value>BasicDbcp</value>
|
||||
</cloud:pool-data-sources>
|
||||
</cloud:data-source>
|
||||
|
||||
<cloud:data-source id="db-pool-tomcat-jdbc" service-name="my-service">
|
||||
|
||||
Reference in New Issue
Block a user