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 b9b3765..56cbc01 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 @@ -22,18 +22,18 @@ import org.springframework.jdbc.datasource.SimpleDriverDataSource; */ public abstract class DataSourceCreator extends AbstractServiceConnectorCreator { - protected static Logger logger = Logger.getLogger(DataSourceCreator.class.getName()); + protected static Logger logger = Logger.getLogger(DataSourceCreator.class.getName()); - private String driverSystemPropKey; - private String[] driverClasses; - private String validationQuery; + private String driverSystemPropKey; + private String[] driverClasses; + private String validationQuery; - private List> pooledDataSourceCreators = new ArrayList>(); + private List> pooledDataSourceCreators = new ArrayList>(); public DataSourceCreator(String driverSystemPropKey, String[] driverClasses, String validationQuery) { - this.driverSystemPropKey = driverSystemPropKey; - this.driverClasses = driverClasses; - this.validationQuery = validationQuery; + this.driverSystemPropKey = driverSystemPropKey; + this.driverClasses = driverClasses; + this.validationQuery = validationQuery; if (pooledDataSourceCreators.size() == 0) { pooledDataSourceCreators.add(new BasicDbcpPooledDataSourceCreator()); @@ -63,21 +63,21 @@ public abstract class DataSourceCreator extend } } - public String getDriverClassName(SI serviceInfo) { - String userSpecifiedDriver = System.getProperty(driverSystemPropKey); + public String getDriverClassName(SI serviceInfo) { + String userSpecifiedDriver = System.getProperty(driverSystemPropKey); - if (userSpecifiedDriver != null && !userSpecifiedDriver.isEmpty()) { - return userSpecifiedDriver; - } else { - for (String driver : driverClasses) { - try { - Class.forName(driver); - return driver; - } catch (ClassNotFoundException ex) { - // continue... - } - } - } - throw new CloudException("No suitable database driver found for " + serviceInfo.getId() + " service "); - } + if (userSpecifiedDriver != null && !userSpecifiedDriver.isEmpty()) { + return userSpecifiedDriver; + } else { + for (String driver : driverClasses) { + try { + Class.forName(driver); + return driver; + } catch (ClassNotFoundException ex) { + // continue... + } + } + } + throw new CloudException("No suitable database driver found for " + serviceInfo.getId() + " service "); + } } diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/HikariCpPooledDataSourceCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/HikariCpPooledDataSourceCreator.java index da7296d..3a9b404 100644 --- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/HikariCpPooledDataSourceCreator.java +++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/HikariCpPooledDataSourceCreator.java @@ -15,43 +15,42 @@ import com.zaxxer.hikari.HikariDataSource; public class HikariCpPooledDataSourceCreator implements PooledDataSourceCreator { - protected static Logger logger = Logger.getLogger(PooledDataSourceCreator.class.getName()); + protected static Logger logger = Logger.getLogger(PooledDataSourceCreator.class.getName()); - private static final String HIKARI_CLASSNAME = "com.zaxxer.hikari.HikariDataSource"; - - private DataSourceConfigurer configurer = new DataSourceConfigurer(); + private static final String HIKARI_CLASSNAME = "com.zaxxer.hikari.HikariDataSource"; - protected void setBasicDataSourceProperties(DataSource basicDataSource, RelationalServiceInfo serviceInfo, - ServiceConnectorConfig serviceConnectorConfig, - String driverClassName, String validationQuery) { - BeanWrapper target = new BeanWrapperImpl(basicDataSource); - target.setPropertyValue("driverClassName", driverClassName); - target.setPropertyValue("jdbcUrl", serviceInfo.getJdbcUrl()); - if (validationQuery != null) { - target.setPropertyValue("connectionTestQuery", validationQuery); - } + private DataSourceConfigurer configurer = new DataSourceConfigurer(); - if (serviceConnectorConfig == null) { - // choose sensible values so that we set max connection pool size to what - // free tier services on Cloud Foundry and Heroku allow - target.setPropertyValue("maximumPoolSize", 4); - target.setPropertyValue("connectionTimeout", 30000); - } - configurer.configure(basicDataSource, (DataSourceConfig)serviceConnectorConfig); - } + protected void setBasicDataSourceProperties(DataSource basicDataSource, RelationalServiceInfo serviceInfo, + ServiceConnectorConfig serviceConnectorConfig, + String driverClassName, String validationQuery) { + BeanWrapper target = new BeanWrapperImpl(basicDataSource); + target.setPropertyValue("driverClassName", driverClassName); + target.setPropertyValue("jdbcUrl", serviceInfo.getJdbcUrl()); + if (validationQuery != null) { + target.setPropertyValue("connectionTestQuery", validationQuery); + } - - @Override - public DataSource create(RelationalServiceInfo serviceInfo, ServiceConnectorConfig serviceConnectorConfig, - String driverClassName, String validationQuery) { - if (hasClass(HIKARI_CLASSNAME)) { - logger.info("Found HikariCP on the classpath. Using it for DataSource connection pooling."); - HikariDataSource ds = new HikariDataSource(); - setBasicDataSourceProperties(ds, serviceInfo, serviceConnectorConfig, driverClassName, validationQuery); - return ds; - } else { - return null; - } - } + if (serviceConnectorConfig == null) { + // choose sensible values so that we set max connection pool size to what + // free tier services on Cloud Foundry and Heroku allow + target.setPropertyValue("maximumPoolSize", 4); + target.setPropertyValue("connectionTimeout", 30000); + } + configurer.configure(basicDataSource, (DataSourceConfig)serviceConnectorConfig); + } + + @Override + public DataSource create(RelationalServiceInfo serviceInfo, ServiceConnectorConfig serviceConnectorConfig, + String driverClassName, String validationQuery) { + if (hasClass(HIKARI_CLASSNAME)) { + logger.info("Found HikariCP on the classpath. Using it for DataSource connection pooling."); + HikariDataSource ds = new HikariDataSource(); + setBasicDataSourceProperties(ds, serviceInfo, serviceConnectorConfig, driverClassName, validationQuery); + return ds; + } else { + return null; + } + } } diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/PooledDataSourceCreatorsTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/PooledDataSourceCreatorsTest.java index c906a79..4456a56 100644 --- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/PooledDataSourceCreatorsTest.java +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/PooledDataSourceCreatorsTest.java @@ -14,7 +14,7 @@ public class PooledDataSourceCreatorsTest { // Just to grab driver class name and validation query string private MysqlDataSourceCreator mysqlDataSourceCreator = new MysqlDataSourceCreator(); - + @Before public void setup() { MockitoAnnotations.initMocks(this); @@ -22,30 +22,30 @@ public class PooledDataSourceCreatorsTest { @Test public void pooledDataSourceCreationDbcp() { - assertPooledDataSource(new BasicDbcpPooledDataSourceCreator()); + assertPooledDataSource(new BasicDbcpPooledDataSourceCreator()); } - @Test - public void pooledDataSourceCreationTomcatDbcp() { - assertPooledDataSource(new TomcatDbcpPooledDataSourceCreator()); - } + @Test + public void pooledDataSourceCreationTomcatDbcp() { + assertPooledDataSource(new TomcatDbcpPooledDataSourceCreator()); + } + + @Test + public void pooledDataSourceCreationTomcatHighPerformance() { + assertPooledDataSource(new TomcatHighPerformancePooledDataSourceCreator()); + } + + @Test + public void pooledDataSourceCreationHikariCP() { + assertPooledDataSource(new HikariCpPooledDataSourceCreator()); + } - @Test - public void pooledDataSourceCreationTomcatHighPerformance() { - assertPooledDataSource(new TomcatHighPerformancePooledDataSourceCreator()); - } - - @Test - public void pooledDataSourceCreationHikariCP() { - assertPooledDataSource(new HikariCpPooledDataSourceCreator()); - } - private void assertPooledDataSource(PooledDataSourceCreator testCreator) { - DataSource ds = testCreator.create(mockMysqlServiceInfo, null, - mysqlDataSourceCreator.getDriverClassName(mockMysqlServiceInfo), - "select 1"); + DataSource ds = testCreator.create(mockMysqlServiceInfo, null, + mysqlDataSourceCreator.getDriverClassName(mockMysqlServiceInfo), + "select 1"); - Assert.assertNotNull("Failed to create datasource with " + testCreator.getClass().getSimpleName(), ds); + Assert.assertNotNull("Failed to create datasource with " + testCreator.getClass().getSimpleName(), ds); } }