From ddc2a6e852729f5e20b6eb67ad9828e92b046f10 Mon Sep 17 00:00:00 2001 From: Khushal Oza Date: Fri, 29 Mar 2013 15:41:39 +0530 Subject: [PATCH] Khushal/Gurpreet: Added support for Flyway DB migration tool into MifosX. Added a call for it in TomatJDBCDataSourcePerTenantService so that it gets called per tenant once. --- mifosng-provider/build.gradle | 1 + .../database/DBMigrationHelper.java | 29 +++++++++++++++++++ .../TomcatJdbcDataSourcePerTenantService.java | 2 ++ 3 files changed, 32 insertions(+) create mode 100644 mifosng-provider/src/main/java/org/mifosplatform/database/DBMigrationHelper.java diff --git a/mifosng-provider/build.gradle b/mifosng-provider/build.gradle index 4df413d56..1a9215b0c 100644 --- a/mifosng-provider/build.gradle +++ b/mifosng-provider/build.gradle @@ -156,6 +156,7 @@ dependencies { [group: 'com.lowagie', name: 'itext', version: '2.1.7'], [group: 'com.lowagie', name: 'itext-rtf', version: '2.1.7'], [group: 'org.mnode.ical4j', name: 'ical4j', version: '1.0.4'], + [group: 'com.googlecode.flyway', name: 'flyway-maven-plugin', version: '2.1.1'] ) testCompile 'junit:junit:4.10', diff --git a/mifosng-provider/src/main/java/org/mifosplatform/database/DBMigrationHelper.java b/mifosng-provider/src/main/java/org/mifosplatform/database/DBMigrationHelper.java new file mode 100644 index 000000000..d9b843c9a --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosplatform/database/DBMigrationHelper.java @@ -0,0 +1,29 @@ +package org.mifosplatform.database; +import com.googlecode.flyway.core.Flyway; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.sql.DataSource; + +/** + * Use Flyway library to migrate DB schema. Searches for .sql files in the migrate folder. + * For more details on this refer to: + * http://flywaydb.org/documentation/migration/sql.html + */ +public class DBMigrationHelper { + +// private static final String DB_CONNECTION_URL = "jdbc:mysql://localhost:3306/mifostenant-default"; +// private static final String DB_USER = "root"; +// private static final String DB_PASSWORD = "mysql"; + + protected final Log logger = LogFactory.getLog(getClass()); + + public void migrateDB(DataSource tenantDataSource){ + + logger.info("Checking for DB Schema Migration. Tenant: "+ tenantDataSource); + + Flyway flyway = new Flyway(); + flyway.setDataSource(tenantDataSource); + flyway.migrate(); + } +} diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java index 9a79839a9..3811c37e3 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java @@ -12,6 +12,7 @@ import javax.sql.DataSource; import org.apache.tomcat.jdbc.pool.PoolConfiguration; import org.apache.tomcat.jdbc.pool.PoolProperties; +import org.mifosplatform.database.DBMigrationHelper; import org.mifosplatform.infrastructure.core.domain.MifosPlatformTenant; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -51,6 +52,7 @@ public class TomcatJdbcDataSourcePerTenantService implements DataSourcePerTenant } else { tenantDataSource = createNewDataSourceFor(tenant); this.tenantToDataSourceMap.put(tenant.getId(), tenantDataSource); + new DBMigrationHelper().migrateDB(tenantDataSource); } }