Allow customizing Tenants DB JDBC uid/pwd/driver (FINERACT-806) (#713)

* Allow customizing Tenants DB JDBC uid/pwd/driver (FINERACT-806)

Added Java system properties for username and password to docker-compose

Modified sever.xml to get username and password

* Fixes for customizing Tenants DB JDBC uid/pwd/driver (FINERACT-806)

* Use random MYSQL_ROOT_PASSWORD in docker-compose.yml (FINERACT-806)

This provides future non-regression testing that the the customized
MySQL password is actually really used, and it doesn't just work because
"mysql" is still hard-coded anywhere.

Co-authored-by: Yemdjih Kaze Nasser <kaze.nasser@outlook.com>
This commit is contained in:
Michael Vorburger ⛑️
2020-02-09 19:36:58 +01:00
committed by GitHub
co-authored by Yemdjih Kaze Nasser
parent c6b2c09032
commit 228ec22a60
4 changed files with 25 additions and 19 deletions
+4 -2
View File
@@ -26,7 +26,7 @@ services:
- ./fineract-db/docker:/docker-entrypoint-initdb.d:Z,ro - ./fineract-db/docker:/docker-entrypoint-initdb.d:Z,ro
restart: always restart: always
environment: environment:
MYSQL_ROOT_PASSWORD: mysql MYSQL_ROOT_PASSWORD: skdcnwauicn2ucnaecasdsajdnizucawencascdca
healthcheck: healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 10s timeout: 10s
@@ -43,6 +43,8 @@ services:
depends_on: depends_on:
- fineractmysql - fineractmysql
environment: environment:
- JAVA_OPTS=-Dfineract_tenants_url=jdbc:mysql:thin://fineractmysql:3306/mifosplatform-tenants -Djava.awt.headless=true -XX:+UseG1GC -Dfile.encoding=UTF-8 - JAVA_OPTS=-Dfineract_tenants_url=jdbc:mysql:thin://fineractmysql:3306/mifosplatform-tenants -Dfineract_tenants_driver=org.drizzle.jdbc.DrizzleDriver -Dfineract_tenants_uid=root -Dfineract_tenants_pwd=skdcnwauicn2ucnaecasdsajdnizucawencascdca -Djava.awt.headless=true -XX:+UseG1GC -Dfile.encoding=UTF-8
- FINERACT_DEFAULT_TENANTDB_HOSTNAME=fineractmysql - FINERACT_DEFAULT_TENANTDB_HOSTNAME=fineractmysql
- FINERACT_DEFAULT_TENANTDB_PORT=3306 - FINERACT_DEFAULT_TENANTDB_PORT=3306
- FINERACT_DEFAULT_TENANTDB_UID=root
- FINERACT_DEFAULT_TENANTDB_PWD=skdcnwauicn2ucnaecasdsajdnizucawencascdca
+3 -3
View File
@@ -41,10 +41,10 @@
<Resource type="javax.sql.DataSource" <Resource type="javax.sql.DataSource"
name="jdbc/mifosplatform-tenants" name="jdbc/mifosplatform-tenants"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="org.drizzle.jdbc.DrizzleDriver" driverClassName="${fineract_tenants_driver}"
url="${fineract_tenants_url}" url="${fineract_tenants_url}"
username="root" username="${fineract_tenants_uid}"
password="mysql" password="${fineract_tenants_pwd}"
initialSize="3" initialSize="3"
maxActive="10" maxActive="10"
maxIdle="6" maxIdle="6"
@@ -43,7 +43,7 @@ import org.springframework.stereotype.Service;
@Service @Service
public class TenantDatabaseUpgradeService { public class TenantDatabaseUpgradeService {
private final static Logger LOG = LoggerFactory.getLogger(TenantDatabaseUpgradeService.class); private final static Logger LOG = LoggerFactory.getLogger(TenantDatabaseUpgradeService.class);
private final TenantDetailsService tenantDetailsService; private final TenantDetailsService tenantDetailsService;
protected final DataSource tenantDataSource; protected final DataSource tenantDataSource;
@@ -88,27 +88,31 @@ public class TenantDatabaseUpgradeService {
* itself. * itself.
*/ */
private void upgradeTenantDB() { private void upgradeTenantDB() {
String dbHostname = getEnvVar("FINERACT_DEFAULT_TENANTDB_HOSTNAME", "localhost"); String dbHostname = getEnvVar("FINERACT_DEFAULT_TENANTDB_HOSTNAME", "localhost");
String dbPort = getEnvVar("FINERACT_DEFAULT_TENANTDB_PORT", "3306"); String dbPort = getEnvVar("FINERACT_DEFAULT_TENANTDB_PORT", "3306");
LOG.info("upgradeTenantDB: FINERACT_DEFAULT_TENANTDB_HOSTNAME = {}, FINERACT_DEFAULT_TENANTDB_PORT = {}", dbHostname, dbPort); String dbUid = getEnvVar("FINERACT_DEFAULT_TENANTDB_UID", "root");
String dbPwd = getEnvVar("FINERACT_DEFAULT_TENANTDB_PWD", "mysql");
LOG.info("upgradeTenantDB: FINERACT_DEFAULT_TENANTDB_HOSTNAME = {}, FINERACT_DEFAULT_TENANTDB_PORT = {}", dbHostname, dbPort);
final Flyway flyway = new Flyway(); final Flyway flyway = new Flyway();
flyway.setDataSource(tenantDataSource); flyway.setDataSource(tenantDataSource);
flyway.setLocations("sql/migrations/list_db"); flyway.setLocations("sql/migrations/list_db");
flyway.setOutOfOrder(true); flyway.setOutOfOrder(true);
flyway.setPlaceholders(ImmutableMap.of( // FINERACT-773 flyway.setPlaceholders(ImmutableMap.of( // FINERACT-773
"fineract_default_tenantdb_hostname", dbHostname, "fineract_default_tenantdb_hostname", dbHostname,
"fineract_default_tenantdb_port", dbPort)); "fineract_default_tenantdb_port", dbPort,
"fineract_default_tenantdb_uid", dbUid,
"fineract_default_tenantdb_pwd", dbPwd));
flyway.migrate(); flyway.migrate();
tenantDataSourcePortFixService.fixUpTenantsSchemaServerPort(); tenantDataSourcePortFixService.fixUpTenantsSchemaServerPort();
} }
private String getEnvVar(String name, String defaultValue) { private String getEnvVar(String name, String defaultValue) {
String value = System.getenv(name); String value = System.getenv(name);
if (value == null) { if (value == null) {
return defaultValue; return defaultValue;
} }
return value; return value;
} }
} }
@@ -66,7 +66,7 @@ CREATE TABLE `tenants` (
LOCK TABLES `tenants` WRITE; LOCK TABLES `tenants` WRITE;
/*!40000 ALTER TABLE `tenants` DISABLE KEYS */; /*!40000 ALTER TABLE `tenants` DISABLE KEYS */;
INSERT INTO `tenants` VALUES (1,'default','Default Demo Tenant','mifostenant-default','Asia/Kolkata',NULL,NULL,NULL,NULL,'${fineract_default_tenantdb_hostname}','${fineract_default_tenantdb_port}','root','mysql',1); INSERT INTO `tenants` VALUES (1,'default','Default Demo Tenant','mifostenant-default','Asia/Kolkata',NULL,NULL,NULL,NULL,'${fineract_default_tenantdb_hostname}','${fineract_default_tenantdb_port}','${fineract_default_tenantdb_uid}','${fineract_default_tenantdb_pwd}',1);
-- Add tenants to support interoperation multi-tenancy -- Add tenants to support interoperation multi-tenancy
-- INSERT INTO `tenants` VALUES (2,'tn01','Buffalo','tn01','Africa/Bujumbura',NULL,NULL,NULL,NULL,'localhost','3306','root','mysql',1); -- INSERT INTO `tenants` VALUES (2,'tn01','Buffalo','tn01','Africa/Bujumbura',NULL,NULL,NULL,NULL,'localhost','3306','root','mysql',1);
-- INSERT INTO `tenants` VALUES (3,'tn02','Lion','tn02','Africa/Bujumbura',NULL,NULL,NULL,NULL,'localhost','3306','root','mysql',1); -- INSERT INTO `tenants` VALUES (3,'tn02','Lion','tn02','Africa/Bujumbura',NULL,NULL,NULL,NULL,'localhost','3306','root','mysql',1);