getFallbackServiceInfoCreator() {
return new FallbackBaseServiceInfoCreator();
}
}
\ No newline at end of file
diff --git a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/PostgresqlServiceInfoCreator.java b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/PostgresqlServiceInfoCreator.java
index e6d5ab2..013e9a4 100644
--- a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/PostgresqlServiceInfoCreator.java
+++ b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/PostgresqlServiceInfoCreator.java
@@ -20,6 +20,6 @@ public class PostgresqlServiceInfoCreator extends RelationalServiceInfoCreator env = new HashMap();
String postgresUrl = getRelationalServiceUrl("db");
- env.put("HEROKU_POSTGRESQL_YELLOW_URL", postgresUrl);
+ env.put(envVarName, postgresUrl);
when(mockEnvironment.getEnv()).thenReturn(env);
List serviceInfos = testCloudConnector.getServiceInfos();
- ServiceInfo serviceInfo = getServiceInfo(serviceInfos, "HEROKU_POSTGRESQL_YELLOW");
+ ServiceInfo serviceInfo = getServiceInfo(serviceInfos, serviceInstanceName);
assertNotNull(serviceInfo);
assertTrue(serviceInfo instanceof PostgresqlServiceInfo);
assertReleationServiceInfo((PostgresqlServiceInfo) serviceInfo, "db");
diff --git a/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorRedisServiceTest.java b/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorRedisServiceTest.java
index d1ccaee..12ee250 100644
--- a/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorRedisServiceTest.java
+++ b/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorRedisServiceTest.java
@@ -20,7 +20,7 @@ public class HerokuConnectorRedisServiceTest extends AbstractHerokuConnectorTest
@Test
public void redisServiceCreation() {
- for (String redisEnv : new String[]{"REDISTOGO_URL", "REDISCLOUD_URL", "OPENREDIS_URL", "REDISGREEN_URL"}) {
+ for (String redisEnv : new String[]{"REDISTOGO_URL", "REDISCLOUD_URL", "OPENREDIS_URL", "REDISGREEN_URL", "REDIS_URL"}) {
Map env = new HashMap();
String redisUrl = getRedisServiceUrl();
env.put(redisEnv, redisUrl);
diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudDataSourceFactoryParser.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudDataSourceFactoryParser.java
index df6f3bf..2fc1b32 100644
--- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudDataSourceFactoryParser.java
+++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/xml/CloudDataSourceFactoryParser.java
@@ -10,6 +10,7 @@ import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element;
import java.util.List;
+import java.util.Map;
/**
* Parser for the {@code } namespace element
@@ -23,6 +24,7 @@ public class CloudDataSourceFactoryParser extends AbstractPoolingCloudServiceFac
private static final String ELEMENT_CONNECTION = "connection";
private static final String ELEMENT_POOL = "pool";
private static final String ELEMENT_DATASOURCE_NAMES = "pool-data-sources";
+ private static final String ELEMENT_CONNECTION_PROPERTIES = "connection-properties";
public CloudDataSourceFactoryParser() {
super(CloudDataSourceFactory.class);
@@ -54,9 +56,16 @@ public class CloudDataSourceFactoryParser extends AbstractPoolingCloudServiceFac
parseListElement(dataSourceNamesElement, dataSourceConfigBeanBuilder.getRawBeanDefinition());
}
+ Map, ?> properties = null;
+ Element propertiesElement = DomUtils.getChildElementByTagName(element, ELEMENT_CONNECTION_PROPERTIES);
+ if (propertiesElement != null) {
+ properties = parserContext.getDelegate().parseMapElement(propertiesElement, builder.getRawBeanDefinition());
+ }
+
dataSourceConfigBeanBuilder.addConstructorArgValue(cloudPoolConfiguration);
dataSourceConfigBeanBuilder.addConstructorArgValue(cloudConnectionConfiguration);
dataSourceConfigBeanBuilder.addConstructorArgValue(dataSourceNames);
+ dataSourceConfigBeanBuilder.addConstructorArgValue(properties);
builder.addConstructorArgValue(dataSourceConfigBeanBuilder.getBeanDefinition());
}
diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfig.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfig.java
index b19d538..d2f909a 100644
--- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfig.java
+++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfig.java
@@ -1,8 +1,10 @@
package org.springframework.cloud.service.relational;
+import org.springframework.cloud.service.MapServiceConnectorConfig;
import org.springframework.cloud.service.PooledServiceConnectorConfig;
import java.util.List;
+import java.util.Map;
/**
*
@@ -11,21 +13,37 @@ import java.util.List;
*/
public class DataSourceConfig extends PooledServiceConnectorConfig {
private final ConnectionConfig connectionConfig;
+ private final MapServiceConnectorConfig connectionProperties;
private final List pooledDataSourceNames;
public DataSourceConfig(PoolConfig poolConfig, ConnectionConfig connectionConfig) {
- this(poolConfig, connectionConfig, null);
+ this(poolConfig, connectionConfig, null, null);
}
public DataSourceConfig(List pooledDataSourceNames) {
- this(null, null, pooledDataSourceNames);
+ this(null, null, pooledDataSourceNames, null);
+ }
+
+ public DataSourceConfig(Map properties) {
+ this(null, null, null, properties);
+ }
+
+ public DataSourceConfig(PoolConfig poolConfig, ConnectionConfig connectionConfig,
+ Map properties) {
+ this(poolConfig, connectionConfig, null, properties);
}
public DataSourceConfig(PoolConfig poolConfig, ConnectionConfig connectionConfig,
List pooledDataSourceNames) {
+ this(poolConfig, connectionConfig, pooledDataSourceNames, null);
+ }
+
+ public DataSourceConfig(PoolConfig poolConfig, ConnectionConfig connectionConfig,
+ List pooledDataSourceNames, Map properties) {
super(poolConfig);
this.connectionConfig = connectionConfig;
this.pooledDataSourceNames = pooledDataSourceNames;
+ this.connectionProperties = new MapServiceConnectorConfig(properties);
}
public ConnectionConfig getConnectionConfiguration() {
@@ -36,6 +54,10 @@ public class DataSourceConfig extends PooledServiceConnectorConfig {
return pooledDataSourceNames;
}
+ public MapServiceConnectorConfig getConnectionProperties() {
+ return connectionProperties;
+ }
+
public static class ConnectionConfig {
private String prop;
diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfigurer.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfigurer.java
index 1b9167e..caccad8 100644
--- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfigurer.java
+++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/DataSourceConfigurer.java
@@ -6,6 +6,8 @@ import javax.sql.DataSource;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
+import org.springframework.cloud.service.MapServiceConnectionConfigurer;
+import org.springframework.cloud.service.MapServiceConnectorConfig;
import org.springframework.cloud.service.PooledServiceConnectorConfigurer;
/**
@@ -14,17 +16,30 @@ import org.springframework.cloud.service.PooledServiceConnectorConfigurer;
*
*/
public class DataSourceConfigurer extends PooledServiceConnectorConfigurer {
+ private MapServiceConnectionConfigurer mapServiceConnectionConfigurer =
+ new MapServiceConnectionConfigurer();
+
@Override
public DataSource configure(DataSource dataSource, DataSourceConfig config) {
if (config != null) {
- BeanWrapper target = new BeanWrapperImpl(dataSource);
-
- if (config.getConnectionConfiguration() != null) {
- BeanWrapper connectionSource = new BeanWrapperImpl(config.getConnectionConfiguration());
- setCorrespondingProperties(target, connectionSource);
- }
+ configureConnection(dataSource, config);
+ configureConnectionProperties(dataSource, config);
return super.configure(dataSource, config);
}
return dataSource;
}
+
+ private void configureConnection(DataSource dataSource, DataSourceConfig config) {
+ if (config.getConnectionConfiguration() != null) {
+ BeanWrapper target = new BeanWrapperImpl(dataSource);
+ BeanWrapper connectionSource = new BeanWrapperImpl(config.getConnectionConfiguration());
+ setCorrespondingProperties(target, connectionSource);
+ }
+ }
+
+ private void configureConnectionProperties(DataSource dataSource, DataSourceConfig config) {
+ if (config.getConnectionProperties() != null) {
+ mapServiceConnectionConfigurer.configure(dataSource, config.getConnectionProperties());
+ }
+ }
}
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/main/java/org/springframework/cloud/service/relational/MysqlDataSourceCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/MysqlDataSourceCreator.java
index daf14ef..f3f2587 100644
--- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/MysqlDataSourceCreator.java
+++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/MysqlDataSourceCreator.java
@@ -9,12 +9,12 @@ import org.springframework.cloud.service.common.MysqlServiceInfo;
*
*/
public class MysqlDataSourceCreator extends DataSourceCreator {
- private static final String[] DRIVERS = new String[]{"org.mariadb.jdbc.Driver", "com.mysql.jdbc.Driver"};
+ public static final String[] DRIVERS = new String[]{"org.mariadb.jdbc.Driver", "com.mysql.jdbc.Driver"};
/**
* Validation query obtained from the MySQL reference manual:
* http://dev.mysql.com/doc/refman/5.1/en/connector-j-usagenotes-j2ee.html
*/
- private static final String VALIDATION_QUERY = "/* ping */ SELECT 1";
+ public static final String VALIDATION_QUERY = "/* ping */ SELECT 1";
public MysqlDataSourceCreator() {
super("spring-cloud.mysql.driver", DRIVERS, VALIDATION_QUERY);
diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/OracleDataSourceCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/OracleDataSourceCreator.java
index 3fc4ac2..d29bfb5 100644
--- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/OracleDataSourceCreator.java
+++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/OracleDataSourceCreator.java
@@ -4,8 +4,8 @@ import org.springframework.cloud.service.common.OracleServiceInfo;
public class OracleDataSourceCreator extends DataSourceCreator {
- private static final String[] DRIVERS = new String[]{"oracle.jdbc.OracleDriver"};
- private static final String VALIDATION_QUERY = "SELECT 'Y' from dual";
+ public static final String[] DRIVERS = new String[]{"oracle.jdbc.OracleDriver"};
+ public static final String VALIDATION_QUERY = "SELECT 'Y' from dual";
public OracleDataSourceCreator() {
super("spring-cloud.oracle.driver", DRIVERS, VALIDATION_QUERY);
diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/PostgresqlDataSourceCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/PostgresqlDataSourceCreator.java
index d8eb18d..40ea217 100644
--- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/PostgresqlDataSourceCreator.java
+++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/PostgresqlDataSourceCreator.java
@@ -10,8 +10,8 @@ import org.springframework.cloud.service.common.PostgresqlServiceInfo;
*/
public class PostgresqlDataSourceCreator extends DataSourceCreator {
- private static final String[] DRIVERS = new String[]{"org.postgresql.Driver"};
- private static final String VALIDATION_QUERY = "SELECT 1";
+ public static final String[] DRIVERS = new String[]{"org.postgresql.Driver"};
+ public static final String VALIDATION_QUERY = "SELECT 1";
public PostgresqlDataSourceCreator() {
super("spring-cloud.postgresql.driver", DRIVERS, VALIDATION_QUERY);
diff --git a/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd b/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd
index 28a8288..b2cdb89 100644
--- a/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd
+++ b/spring-cloud-spring-service-connector/src/main/resources/org/springframework/cloud/config/xml/spring-cloud.xsd
@@ -60,6 +60,7 @@
+
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..bb509cd 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,10 @@ 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"));
+ }
+
+ public static void assertConnectionProperty(DataSource dataSource, String key, Object value) {
+ assertEquals(value, ReflectionUtils.getValue(dataSource, key));
}
}
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigMysqlTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigMysqlTest.java
index 86db892..f1865a9 100644
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigMysqlTest.java
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigMysqlTest.java
@@ -1,6 +1,7 @@
package org.springframework.cloud.config.java;
import org.springframework.cloud.service.common.MysqlServiceInfo;
+import org.springframework.cloud.service.relational.MysqlDataSourceCreator;
/**
*
@@ -13,6 +14,15 @@ public class DataSourceJavaConfigMysqlTest extends DataSourceJavaConfigTest {
return createMysqlService(id);
}
+ @Override
+ protected String getDriverClassName() {
+ return MysqlDataSourceCreator.DRIVERS[0];
+ }
+
+ @Override
+ protected String getValidationQuery() {
+ return MysqlDataSourceCreator.VALIDATION_QUERY;
+ }
}
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigPostgesqlTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigPostgesqlTest.java
index ba7e58e..00f90b0 100644
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigPostgesqlTest.java
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/DataSourceJavaConfigPostgesqlTest.java
@@ -1,6 +1,7 @@
package org.springframework.cloud.config.java;
import org.springframework.cloud.service.common.PostgresqlServiceInfo;
+import org.springframework.cloud.service.relational.PostgresqlDataSourceCreator;
/**
*
@@ -13,6 +14,15 @@ public class DataSourceJavaConfigPostgesqlTest extends DataSourceJavaConfigTest
return createPostgresqlService(id);
}
+ @Override
+ protected String getDriverClassName() {
+ return PostgresqlDataSourceCreator.DRIVERS[0];
+ }
+
+ @Override
+ protected String getValidationQuery() {
+ return PostgresqlDataSourceCreator.VALIDATION_QUERY;
+ }
}
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..89d85d1 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,18 +1,26 @@
package org.springframework.cloud.config.java;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.Properties;
import javax.sql.DataSource;
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;
import org.springframework.context.annotation.Bean;
+import static org.springframework.cloud.config.DataSourceCloudConfigTestHelper.assertConnectionProperties;
+import static org.springframework.cloud.config.DataSourceCloudConfigTestHelper.assertConnectionProperty;
+import static org.springframework.cloud.config.DataSourceCloudConfigTestHelper.assertPoolProperties;
+
/**
* Common base class for testing datasource-related Java config
*
@@ -20,7 +28,9 @@ import org.springframework.context.annotation.Bean;
*
*/
public abstract class DataSourceJavaConfigTest extends AbstractServiceJavaConfigTest {
-
+ protected abstract String getDriverClassName();
+ protected abstract String getValidationQuery();
+
public DataSourceJavaConfigTest() {
super(DatasourceConfigWithId.class, DatasourceConfigWithoutId.class);
}
@@ -46,28 +56,50 @@ public abstract class DataSourceJavaConfigTest extends AbstractServiceJavaConfig
testContext.getBean(getConnectorType());
}
-
+ @Test
+ public void cloudDataSourceWithNoConfig() {
+ ApplicationContext testContext = getTestApplicationContext(DatasourceConfigWithServiceConfig.class,
+ createService("my-service"));
+
+ DataSource ds = testContext.getBean("dataSourceWithNoConfig", getConnectorType());
+
+ assertConnectionProperties(ds, null);
+ assertConnectionProperty(ds, "driverClassName", getDriverClassName());
+ assertConnectionProperty(ds, "validationQuery", getValidationQuery());
+ }
+
@Test
public void cloudDataSourceWithMaxPool() {
ApplicationContext testContext = getTestApplicationContext(DatasourceConfigWithServiceConfig.class,
createService("my-service"));
-
- DataSource ds = testContext.getBean("dbPool20Wait200", getConnectorType());
- DataSourceCloudConfigTestHelper.assertPoolProperties(ds, 20, 0, 200);
-
+
+ DataSource ds = testContext.getBean("dataSourceWithPoolAndConnectionConfig", getConnectorType());
+ assertPoolProperties(ds, 20, 0, 200);
+
Properties connectionProp = new Properties();
connectionProp.put("sessionVariables", "sql_mode='ANSI'");
connectionProp.put("characterEncoding", "UTF-8");
- DataSourceCloudConfigTestHelper.assertConnectionProperties(ds, connectionProp);
+ assertConnectionProperties(ds, connectionProp);
}
-
+
@Test
public void cloudDataSourceWithMinMaxPool() {
ApplicationContext testContext = getTestApplicationContext(DatasourceConfigWithServiceConfig.class,
createService("my-service"));
- DataSource ds = testContext.getBean("dbPool5_20Wait3000", getConnectorType());
- DataSourceCloudConfigTestHelper.assertPoolProperties(ds, 30, 5, 3000);
+ DataSource ds = testContext.getBean("dataSourceWithPoolConfig", getConnectorType());
+ assertPoolProperties(ds, 30, 5, 3000);
+ }
+
+ @Test
+ public void cloudDataSourceWithConnectionProperties() {
+ ApplicationContext testContext = getTestApplicationContext(DatasourceConfigWithServiceConfig.class,
+ createService("my-service"));
+
+ DataSource ds = testContext.getBean("dataSourceWithConnectionPropertiesConfig", getConnectorType());
+ assertConnectionProperty(ds, "driverClassName", "test.driver");
+ assertConnectionProperty(ds, "validationQuery", "test validation query");
+ assertConnectionProperty(ds, "testOnBorrow", false);
}
}
@@ -87,17 +119,36 @@ class DatasourceConfigWithoutId extends AbstractCloudConfig {
class DatasourceConfigWithServiceConfig extends AbstractCloudConfig {
@Bean
- public DataSource dbPool20Wait200() { // use this name so that we have a case with default name
+ public DataSource dataSourceWithNoConfig() {
+ return connectionFactory().dataSource("my-service");
+ }
+
+ @Bean
+ public DataSource dataSourceWithPoolAndConnectionConfig() {
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
+ public DataSource dataSourceWithPoolConfig() {
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);
}
+
+ @Bean
+ public DataSource dataSourceWithConnectionPropertiesConfig() {
+ Map properties = new HashMap();
+ properties.put("driverClassName", "test.driver");
+ properties.put("validationQuery", "test validation query");
+ properties.put("testOnBorrow", false);
+ DataSourceConfig serviceConfig = new DataSourceConfig(null, null, basicDbcpConnectionPool(), properties);
+ 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/DataSourceXmlConfigMysqlTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigMysqlTest.java
index 58b6484..ba3e2f5 100644
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigMysqlTest.java
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigMysqlTest.java
@@ -1,6 +1,7 @@
package org.springframework.cloud.config.xml;
import org.springframework.cloud.service.ServiceInfo;
+import org.springframework.cloud.service.relational.MysqlDataSourceCreator;
/**
*
@@ -8,10 +9,17 @@ import org.springframework.cloud.service.ServiceInfo;
*
*/
public class DataSourceXmlConfigMysqlTest extends DataSourceXmlConfigTest {
-
protected ServiceInfo createService(String id) {
return createMysqlService(id);
}
+ @Override
+ protected String getDriverClassName() {
+ return MysqlDataSourceCreator.DRIVERS[0];
+ }
+ @Override
+ protected String getValidationQuery() {
+ return MysqlDataSourceCreator.VALIDATION_QUERY;
+ }
}
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgesqlTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgesqlTest.java
deleted file mode 100644
index 430eb82..0000000
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgesqlTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.springframework.cloud.config.xml;
-
-import org.springframework.cloud.service.ServiceInfo;
-
-/**
- *
- * @author Ramnivas Laddad
- *
- */
-public class DataSourceXmlConfigPostgesqlTest extends DataSourceXmlConfigTest {
-
- @Override
- protected ServiceInfo createService(String id) {
- return createPostgresqlService(id);
- }
-
-}
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgresqlTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgresqlTest.java
new file mode 100644
index 0000000..58860be
--- /dev/null
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/xml/DataSourceXmlConfigPostgresqlTest.java
@@ -0,0 +1,26 @@
+package org.springframework.cloud.config.xml;
+
+import org.springframework.cloud.service.ServiceInfo;
+import org.springframework.cloud.service.relational.PostgresqlDataSourceCreator;
+
+/**
+ *
+ * @author Ramnivas Laddad
+ *
+ */
+public class DataSourceXmlConfigPostgresqlTest extends DataSourceXmlConfigTest {
+ @Override
+ protected ServiceInfo createService(String id) {
+ return createPostgresqlService(id);
+ }
+
+ @Override
+ protected String getDriverClassName() {
+ return PostgresqlDataSourceCreator.DRIVERS[0];
+ }
+
+ @Override
+ protected String getValidationQuery() {
+ return PostgresqlDataSourceCreator.VALIDATION_QUERY;
+ }
+}
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..32703ba 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;
@@ -16,6 +15,8 @@ import org.springframework.jdbc.datasource.SimpleDriverDataSource;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;
+import static org.springframework.cloud.config.DataSourceCloudConfigTestHelper.assertConnectionProperties;
+import static org.springframework.cloud.config.DataSourceCloudConfigTestHelper.assertConnectionProperty;
/**
*
@@ -23,6 +24,8 @@ import static org.junit.Assert.assertThat;
*
*/
public abstract class DataSourceXmlConfigTest extends AbstractServiceXmlConfigTest {
+ protected abstract String getDriverClassName();
+ protected abstract String getValidationQuery();
protected abstract ServiceInfo createService(String id);
@@ -56,29 +59,50 @@ public abstract class DataSourceXmlConfigTest extends AbstractServiceXmlConfigTe
}
@Test
- public void cloudDataSourceWithMaxPool() throws Exception {
+ public void cloudDataSourceWithNoConfig() throws Exception {
ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml",
createService("my-service"));
- DataSource ds = testContext.getBean("db-pool20-wait200", getConnectorType());
- assertThat(ds, instanceOf(Class.forName(BasicDbcpPooledDataSourceCreator.DBCP2_BASIC_DATASOURCE)));
+ DataSource ds = testContext.getBean("no-config", getConnectorType());
+ assertConnectionProperties(ds, null);
+ assertConnectionProperty(ds, "driverClassName", getDriverClassName());
+ assertConnectionProperty(ds, "validationQuery", getValidationQuery());
+ }
+
+ @Test
+ public void cloudDataSourceWithMaxPool() throws Exception {
+ ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml",
+ createService("my-service"));
+
+ DataSource ds = testContext.getBean("pool-and-connection-config", getConnectorType());
DataSourceCloudConfigTestHelper.assertPoolProperties(ds, 20, 0, 200);
-
+
Properties connectionProp = new Properties();
connectionProp.put("sessionVariables", "sql_mode='ANSI'");
connectionProp.put("characterEncoding", "UTF-8");
DataSourceCloudConfigTestHelper.assertConnectionProperties(ds, connectionProp);
}
-
+
@Test
public void cloudDataSourceWithMinMaxPool() {
ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml",
createService("my-service"));
- DataSource ds = testContext.getBean("db-pool5-30-wait3000", getConnectorType());
+ DataSource ds = testContext.getBean("pool-config", getConnectorType());
DataSourceCloudConfigTestHelper.assertPoolProperties(ds, 30, 5, 3000);
}
+ @Test
+ public void cloudDataSourceWithConnectionProperties() {
+ ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml",
+ createService("my-service"));
+
+ DataSource ds = testContext.getBean("properties-config", getConnectorType());
+ assertConnectionProperty(ds, "driverClassName", "test.driver");
+ assertConnectionProperty(ds, "validationQuery", "test validation query");
+ assertConnectionProperty(ds, "testOnBorrow", false);
+ }
+
@Test
public void cloudDataSourceWithTomcatJdbcDataSource() throws Exception {
ApplicationContext testContext = getTestApplicationContext("cloud-datasource-with-config.xml",
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 {
+ public static final String TEST_DB2_DRIVER = "com.db2.example.Driver";
+
@Mock private DB2ServiceInfo mockDB2ServiceInfo;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
// set a dummy JDBC driver since we can't yet include a real DB2 driver in the project due to licensing restrictions
- System.setProperty("spring-cloud.db2.driver", "com.example.Driver");
+ System.setProperty("spring-cloud.db2.driver", TEST_DB2_DRIVER);
}
@Override
@@ -26,7 +28,7 @@ public class DB2ServiceCreatorTest extends AbstractDataSourceCreatorTest {
- @Mock private OracleServiceInfo mockOracleServiceInfo;
+ public static final String TEST_ORACLE_DRIVER = "com.oracle.example.Driver";
+
+ @Mock
+ private OracleServiceInfo mockOracleServiceInfo;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
// set a dummy JDBC driver since we can't include a real Oracle driver in the project due to licensing restrictions
- System.setProperty("spring-cloud.oracle.driver", "com.example.Driver");
+ System.setProperty("spring-cloud.oracle.driver", TEST_ORACLE_DRIVER);
}
@Override
@@ -26,7 +29,7 @@ public class OracleServiceCreatorTest extends AbstractDataSourceCreatorTest {
- @Mock private PostgresqlServiceInfo mockPostgresqlServiceInfo;
+ @Mock
+ private PostgresqlServiceInfo mockPostgresqlServiceInfo;
@Before
public void setup() {
@@ -29,7 +30,7 @@ public class PostgresqlServiceCreatorTest extends AbstractDataSourceCreatorTest<
@Override
public String getDriverName() {
- return "org.postgresql.Driver";
+ return PostgresqlDataSourceCreator.DRIVERS[0];
}
@Override
@@ -39,6 +40,6 @@ public class PostgresqlServiceCreatorTest extends AbstractDataSourceCreatorTest<
@Override
public String getValidationQueryStart() {
- return "SELECT 1";
+ return PostgresqlDataSourceCreator.VALIDATION_QUERY;
}
}
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerServiceCreatorTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerServiceCreatorTest.java
index 92ebfa1..7c9cd5f 100644
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerServiceCreatorTest.java
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerServiceCreatorTest.java
@@ -8,13 +8,16 @@ import org.mockito.MockitoAnnotations;
import org.springframework.cloud.service.common.SqlServerServiceInfo;
public class SqlServerServiceCreatorTest extends AbstractDataSourceCreatorTest {
- @Mock private SqlServerServiceInfo mockSqlServerServiceInfo;
+ public static final String TEST_SQLSERVER_DRIVER = "com.sqlserver.example.Driver";
+
+ @Mock
+ private SqlServerServiceInfo mockSqlServerServiceInfo;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
// set a dummy JDBC driver since we can't include a real SQL-Server driver in the project due to licensing restrictions
- System.setProperty("spring-cloud.sqlserver.driver", "com.example.Driver");
+ System.setProperty("spring-cloud.sqlserver.driver", TEST_SQLSERVER_DRIVER);
}
@Override
@@ -26,7 +29,7 @@ public class SqlServerServiceCreatorTest extends AbstractDataSourceCreatorTest
-
+
+
+
+
+ BasicDbcp
+
-
+
+
+ BasicDbcp
+
+
+
+
+
+ BasicDbcp
+
+
+
+
+
+