DB マイグレーション

DB マイグレーションは通常、アプリケーションの起動時に適用される DDL の変更です。

Ebean はモデルで diff を実行し、変更に対してデータベースプラットフォーム固有の DDL を生成することで、マイグレーションを生成できます。

Ebean はマイグレーションを実行することもできます(FlywayDb と同様)。FlywayDb や LiquiBase ではなく、Ebean の組み込みマイグレーションランナーを使用することをお勧めします。

依存関係

テストスコープの依存関係として ebean-test を追加(これには ebean-ddl-generator と他の依存関係が含まれます)。

<dependency>
  <groupId>io.ebean</groupId>
  <artifactId>ebean-test</artifactId>
  <version>13.25.0</version>
  <scope>test</scope>
</dependency>

あるいは、ebean-ddl-generator をテストスコープの依存関係として追加します。

<dependency>
  <groupId>io.ebean</groupId>
  <artifactId>ebean-test</artifactId>
  <version>13.25.0</version>
  <scope>test</scope>
</dependency>

マイグレーションを生成

マイグレーションを生成するためのコードを src/test/java に追加します。この最初の例では、単一のデータベースプラットフォームのデータベースマイグレーションを生成します。この例では Postgres です。

package main;

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

public class MigrationGenerator {

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

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

    dbMigration.generateMigration();
  }
}
import io.ebean.annotation.Platform
import io.ebean.dbmigration.DbMigration

fun main() {
  DbMigration.create().apply {
    setPlatform(Platform.POSTGRES)
  }.generateMigration()
}

マルチプラットフォームマイグレーションの生成

複数の異なるデータベースプラットフォームのマイグレーションを生成するには、マイグレーションを生成するプラットフォームごとに addPlatform() を使用します。以下の例では、Postgres、SqlServer、MySql のマイグレーションを生成します。

...
public class MigrationGenerator {

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

    DbMigration dbMigration = DbMigration.create();

    dbMigration.addPlatform(Platform.POSTGRES);
    dbMigration.addPlatform(Platform.SQLSERVER17);
    dbMigration.addPlatform(Platform.MYSQL);

    dbMigration.generateMigration();
  }
}
...
fun main() {
  DbMigration.create().apply {
    addPlatform(Platform.POSTGRES)
    addPlatform(Platform.SQLSERVER17)
    addPlatform(Platform.MYSQL)
  }.generateMigration()
}

メインメソッドを実行してデータベースマイグレーションを生成します。変更がない場合は、マイグレーションは生成されません。モデルが変更された場合は、モデルの DIFF に対するデータベースマイグレーションが生成されます。

生成を実行すると、Ebean がオフラインモードで起動されます(マイグレーションを生成するためにデータベースを実行する必要はありません)。Ebean はモデルに対して DIFF を実行し、指定したプラットフォームのマイグレーション DDL スクリプトを生成します。

生成されたマイグレーションはデフォルトで src/main/resources/dbmigration に移動します。

マイグレーションの実行

Ebean に起動時に DB マイグレーションを実行させるには

1. ebean.migration.run を true に設定します。

プロパティを使用する。例えば application.properties
## run migrations when the Ebean starts
ebean.migration.run=true
yaml を使用します。例application.yaml
## run migrations when the Ebean starts
ebean:
  migration:
    run: true

2. ebean-migration 依存関係を追加します。

まだ追加していない場合は、io.ebean:ebean-migration を依存関係として追加します。

<dependency>
  <groupId>io.ebean</groupId>
  <artifactId>ebean-migration</artifactId>
  <version>13.6.0</version>
</dependency>

ebean.migration.run=true を使用すると、Ebean の起動時にマイグレーションが確認され、実行が必要なものが実行されます。マイグレーションランナーは、デフォルトで、実行されたマイグレーションに関するメタデータが保持され、マイグレーションが正しく実行されるとこのテーブルに挿入される db_migration というテーブルを作成します。