This is an automated email from the ASF dual-hosted git repository. vorburger pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/fineract.git
commit 5f2ba51f5a447131368217726527714d4adf361c Author: Michael Vorburger <[email protected]> AuthorDate: Sat Mar 28 13:52:11 2020 +0100 Minor clean ups in DataSource Connection Pool related code --- .../infrastructure/core/boot/JDBCDriverConfig.java | 35 +++++---- .../core/domain/FineractPlatformTenant.java | 1 - .../domain/FineractPlatformTenantConnection.java | 88 +--------------------- .../TomcatJdbcDataSourcePerTenantService.java | 27 +++---- 4 files changed, 29 insertions(+), 122 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/JDBCDriverConfig.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/JDBCDriverConfig.java index 39aa036..11d2cfc 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/JDBCDriverConfig.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/JDBCDriverConfig.java @@ -27,41 +27,41 @@ import org.springframework.stereotype.Service; @Service public class JDBCDriverConfig { - private final static String DRIVER_CLASS_PROPERTYNAME = "DRIVERCLASS_NAME" ; - private final static String PROTOCOL_PROPERTYNAME = "PROTOCOL" ; - private final static String SUBPROTOCOL_PROPERTYNAME = "SUB_PROTOCOL" ; - private final static String PORT_PROPERTYNAME = "PORT" ; + private final static String DRIVER_CLASS_PROPERTYNAME = "DRIVERCLASS_NAME"; + private final static String PROTOCOL_PROPERTYNAME = "PROTOCOL"; + private final static String SUBPROTOCOL_PROPERTYNAME = "SUB_PROTOCOL"; + private final static String PORT_PROPERTYNAME = "PORT"; - private String driverClassName ; - private String protocol ; - private String subProtocol ; - private Integer port ; + private String driverClassName; + private String protocol; + private String subProtocol; + private Integer port; - @Autowired ApplicationContext context ; + @Autowired ApplicationContext context; @PostConstruct protected void init() { Environment environment = context.getEnvironment() ; - driverClassName = (String)environment.getProperty(DRIVER_CLASS_PROPERTYNAME) ; - protocol = (String) environment.getProperty(PROTOCOL_PROPERTYNAME) ; - subProtocol = (String) environment.getProperty(SUBPROTOCOL_PROPERTYNAME) ; - port = Integer.parseInt((String) environment.getProperty(PORT_PROPERTYNAME)) ; + driverClassName = environment.getProperty(DRIVER_CLASS_PROPERTYNAME) ; + protocol = environment.getProperty(PROTOCOL_PROPERTYNAME) ; + subProtocol = environment.getProperty(SUBPROTOCOL_PROPERTYNAME) ; + port = Integer.parseInt(environment.getProperty(PORT_PROPERTYNAME)) ; } public String getDriverClassName() { - return this.driverClassName ; + return this.driverClassName; } public String getProtocol() { - return this.protocol ; + return this.protocol; } public String getSubProtocol() { - return this.subProtocol ; + return this.subProtocol; } public Integer getPort() { - return this.port ; + return this.port; } public String constructProtocol(String schemaServer, String schemaServerPort, String schemaName) { @@ -69,5 +69,4 @@ public class JDBCDriverConfig { .append('/').append(schemaName).toString(); return url; } - } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenant.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenant.java index a462c92..fb1c0c3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenant.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenant.java @@ -54,5 +54,4 @@ public class FineractPlatformTenant { public FineractPlatformTenantConnection getConnection() { return connection; } - } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java index 54613bb..5439576 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java @@ -20,8 +20,7 @@ package org.apache.fineract.infrastructure.core.domain; /** - * Holds DB server connection details. - * + * Holds Tenant's DB server connection connection details. */ public class FineractPlatformTenantConnection { @@ -77,161 +76,78 @@ public class FineractPlatformTenantConnection { this.testOnBorrow=tesOnBorrow; } - //The Connection Protocol should be built based on jdbc.properties. We can't hard code this here and also, constructing protocol is not this class - //responsibility - /*public String databaseURL() { - final String url = new StringBuilder("jdbc:mysql:thin://").append(this.schemaServer).append(':').append(this.schemaServerPort) - .append('/').append(this.schemaName).toString(); - return url; - }*/ - - /** - * @return the schemaServer - */ public String getSchemaServer() { return this.schemaServer; } - - /** - * @return the schemaServerPort - */ public String getSchemaServerPort() { return this.schemaServerPort; } - - /** - * @return the schemaUsername - */ public String getSchemaUsername() { return this.schemaUsername; } - - /** - * @return the schemaPassword - */ public String getSchemaPassword() { return this.schemaPassword; } - - /** - * @return the autoUpdateEnabled - */ public boolean isAutoUpdateEnabled() { return this.autoUpdateEnabled; } - - /** - * @return the initialSize - */ public int getInitialSize() { return this.initialSize; } - - /** - * @return the validationInterval - */ public long getValidationInterval() { return this.validationInterval; } - - /** - * @return the removeAbandoned - */ public boolean isRemoveAbandoned() { return this.removeAbandoned; } - - /** - * @return the removeAbandonedTimeout - */ public int getRemoveAbandonedTimeout() { return this.removeAbandonedTimeout; } - - /** - * @return the logAbandoned - */ public boolean isLogAbandoned() { return this.logAbandoned; } - - /** - * @return the abandonWhenPercentageFull - */ public int getAbandonWhenPercentageFull() { return this.abandonWhenPercentageFull; } - - /** - * @return the maxActive - */ public int getMaxActive() { return this.maxActive; } - - /** - * @return the minIdle - */ public int getMinIdle() { return this.minIdle; } - - /** - * @return the maxIdle - */ public int getMaxIdle() { return this.maxIdle; } - - /** - * @return the suspectTimeout - */ public int getSuspectTimeout() { return this.suspectTimeout; } - - /** - * @return the timeBetweenEvictionRunsMillis - */ public int getTimeBetweenEvictionRunsMillis() { return this.timeBetweenEvictionRunsMillis; } - - /** - * @return the minEvictableIdleTimeMillis - */ public int getMinEvictableIdleTimeMillis() { return this.minEvictableIdleTimeMillis; } - - /** - * @return the maxRetriesOnDeadlock - */ public int getMaxRetriesOnDeadlock() { return this.maxRetriesOnDeadlock; } - - /** - * @return the maxIntervalBetweenRetries - */ public int getMaxIntervalBetweenRetries() { return this.maxIntervalBetweenRetries; } @@ -249,6 +165,6 @@ public class FineractPlatformTenantConnection { } @Override public String toString() { - return this.schemaName+":"+this.schemaServer+":"+this.schemaServerPort; + return this.schemaName + ":" + this.schemaServer + ":" + this.schemaServerPort; } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java index 2318db9..48a2bbb 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java @@ -31,7 +31,7 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; /** - * Implementation that returns a new or existing tomcat 7 jdbc connection pool + * Implementation that returns a new or existing connection pool * datasource based on the tenant details stored in a {@link ThreadLocal} * variable for this request. * @@ -45,7 +45,7 @@ public class TomcatJdbcDataSourcePerTenantService implements RoutingDataSourceSe private final DataSource tenantDataSource; @Autowired - private JDBCDriverConfig driverConfig ; + private JDBCDriverConfig driverConfig; @Autowired public TomcatJdbcDataSourcePerTenantService(final @Qualifier("hikariTenantDataSource") DataSource tenantDataSource) { @@ -54,7 +54,6 @@ public class TomcatJdbcDataSourcePerTenantService implements RoutingDataSourceSe @Override public DataSource retrieveDataSource() { - // default to tenant database datasource DataSource tenantDataSource = this.tenantDataSource; @@ -63,12 +62,10 @@ public class TomcatJdbcDataSourcePerTenantService implements RoutingDataSourceSe final FineractPlatformTenantConnection tenantConnection = tenant.getConnection(); synchronized (this.tenantToDataSourceMap) { - // if tenantConnection information available switch to - // appropriate - // datasource - // for that tenant. - if (this.tenantToDataSourceMap.containsKey(tenantConnection.getConnectionId())) { - tenantDataSource = this.tenantToDataSourceMap.get(tenantConnection.getConnectionId()); + // if tenantConnection information available switch to the appropriate datasource for that tenant. + DataSource possibleDS = this.tenantToDataSourceMap.get(tenantConnection.getConnectionId()); + if (possibleDS != null) { + tenantDataSource = possibleDS; } else { tenantDataSource = createNewDataSourceFor(tenantConnection); this.tenantToDataSourceMap.put(tenantConnection.getConnectionId(), tenantDataSource); @@ -79,13 +76,9 @@ public class TomcatJdbcDataSourcePerTenantService implements RoutingDataSourceSe return tenantDataSource; } - // creates the data source oltp and report databases + // creates the tenant data source for the oltp and report database private DataSource createNewDataSourceFor(final FineractPlatformTenantConnection tenantConnectionObj) { - // see - // http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency - - // see also org.apache.fineract.DataSourceProperties.setDefaults() - String jdbcUrl = this.driverConfig.constructProtocol(tenantConnectionObj.getSchemaServer(), tenantConnectionObj.getSchemaServerPort(), tenantConnectionObj.getSchemaName()); + String jdbcUrl = this.driverConfig.constructProtocol(tenantConnectionObj.getSchemaServer(), tenantConnectionObj.getSchemaServerPort(), tenantConnectionObj.getSchemaName()); HikariConfig config = new HikariConfig(); config.setDriverClassName(this.driverConfig.getDriverClassName()); @@ -93,12 +86,12 @@ public class TomcatJdbcDataSourcePerTenantService implements RoutingDataSourceSe config.setJdbcUrl(jdbcUrl); config.setUsername(tenantConnectionObj.getSchemaUsername()); config.setPassword(tenantConnectionObj.getSchemaPassword()); - config.setConnectionTestQuery("SELECT 1"); config.setValidationTimeout(tenantConnectionObj.getValidationInterval()); - config.setAutoCommit(true); + // https://github.com/brettwooldridge/HikariCP/wiki/MySQL-Configuration + return new HikariDataSource(config); } } \ No newline at end of file
