本家はこちら
flyway でdb migrateしているが、公式ドキュメントではmultiple schemaは記述の仕方でなんとかなるんだけど、DBが分かれた場合は、地道にタスクを書くしかないっぽくて、そんなの嫌なのでちょっとメモ。
全体構成
一旦こんな感じのディレクトリ構成にしてみる。
├── build.gradle
├── conf
│ ├── example-admin.conf
│ └── example.conf
└── src
└── main
└── resources
├── example
│ └── migration
│ ├── V201801060359__create_account_table.sql
│ └── V201801070137__create_table.sql
└── example-admin
└── migration
├── V201801060359__create_account_table.sql
└── V201801070137__create_table.sql
resourcesディレクトリ
SQLはsrc/main/resources配下にexampleとexample-adminの配下にマイグレーション用のSQLファイルがおいてある。
build.gradle
汚いけど、taskを動的生成する
build.gradle
repositories {
jcenter()
}
plugins {
id 'org.flywaydb.flyway' version '6.4.1'
id 'java'
}
["example", "example-admin"].each { name ->
task "${name}FlywayMigrate" (type: org.flywaydb.gradle.task.FlywayMigrateTask) {
configFiles = ["conf/${name}.conf"]
}
task "${name}FlywayBaseline"(type: org.flywaydb.gradle.task.FlywayBaselineTask) {
configFiles = ["conf/${name}.conf"]
}
task "${name}FlywayClean"(type: org.flywaydb.gradle.task.FlywayCleanTask) {
configFiles = ["conf/${name}.conf"]
}
task "${name}FlywayInfo"(type: org.flywaydb.gradle.task.FlywayInfoTask) {
configFiles = ["conf/${name}.conf"]
}
}
こんな感じで、タスクを動的生成するようにする
confディレクトリ
ここにはDBとスキーマの定義ファイルがおいてある confファイルはこんな感じ
conf/example.conf
flyway.url=jdbc:postgresql://localhost:5432/example
flyway.user=example
flyway.password=example
flyway.schemas=public
flyway.locations=filesystem:src/main/resources/example/migration
conf/example-admin.conf