DB Migrations

Ebean has built in support for generating DB migrations and running them

Generating DB Migrations

Note that we can use ebeaninit to add GenerateDbMigration (the code below) to your project.

In src/test/java add the code below to generate migrations.

In src/test/kotlin add the code below to generate migrations.

To generate a DB migration we run this main method. The migration DDL for the given platform will be generated based on the changes to the model (e.g. alter table add column etc).

package main;

import io.ebean.annotation.Platform;
import io.ebean.dbmigration.DbMigration;
import java.io.IOException;

public class GenerateDbMigration {

  /**
   * Generate the DDL for the next DB migration.
   */
  public static void main(String[] args) throws IOException {

    DbMigration dbMigration = DbMigration.create();
    dbMigration.setPlatform(Platform.POSTGRES);

    dbMigration.generateMigration();
  }
}
package main

import io.ebean.annotation.Platform
import io.ebean.dbmigration.DbMigration

/**
 * Generate the DDL for the next DB migration.
 */
fun main(args : Array<!String>) {

  // requires jvmTarget 1.8
  val dbMigration = DbMigration.create()
  dbMigration.setPlatform(Platform.POSTGRES)

  dbMigration.generateMigration()
}
  

We run this manually when we have completed some work and consider it ready to be released.

Running the generation starts Ebean in offline mode, performs a DIFF of the model and generates the migration DDL script.

Running Migration

To run the migration using the built in migration runner, set ebean.migration.run to true.

In application.yaml
## run migrations when the Ebean starts
ebean:
  migration:
    run: true

With ebean.migration.run=true then when the Ebean starts it will look at the migrations and run any that need to be run. The migration runner will by default create a table called db_migration that holds the meta data about the migrations that have been run and inserts into this table when migrations are successfully executed.