All Downloads are FREE. Search and download functionalities are using the official Maven repository.

skinny.dbmigration.DBMigration.scala Maven / Gradle / Ivy

The newest version!
package skinny.dbmigration

import com.googlecode.flyway.core.Flyway
import skinny.{ SkinnyEnv, DBSettings }
import scalikejdbc.ConnectionPool
import com.typesafe.config.ConfigFactory
import scala.collection.JavaConverters._

object DBMigration extends DBMigration

/**
 * DB migration tool.
 */
trait DBMigration {

  def migrate(env: String = SkinnyEnv.Development, poolName: String = ConnectionPool.DEFAULT_NAME.name) = {
    val skinnyEnv = SkinnyEnv.get()
    try {
      System.setProperty(SkinnyEnv.Key, env)
      DBSettings.initialize()

      val flyway = new Flyway
      flyway.setDataSource(ConnectionPool.get(Symbol(poolName)).dataSource)

      val migrationConfigPath = s"${env}.db.${poolName}.migration"
      val rootConfig = ConfigFactory.load()
      if (rootConfig.hasPath(migrationConfigPath)) {
        rootConfig.getConfig(migrationConfigPath).entrySet.asScala.foreach(println)
        val locations = rootConfig.getConfig(migrationConfigPath)
          .getStringList("locations").asScala.map(l => "db.migration." + l.replaceAll("/", "."))
        if (!locations.isEmpty) {
          flyway.setLocations(locations: _*)
        }
      }
      flyway.migrate()

    } finally {
      skinnyEnv.foreach { env => System.setProperty(SkinnyEnv.Key, env) }
      DBSettings.initialize()
    }
  }

}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy