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 というテーブルを作成します。