flywayのmultiple databases migration の設定メモ

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

flyway.url=jdbc:postgresql://localhost:5432/example-admin
flyway.user=exampleadmin
flyway.password=exampleadmin
flyway.schemas=public
flyway.locations=filesystem:src/main/resources/example-admin/migration

flyway4.1.1でgradleでエラーがでた-Unable to instantiate –

flyway使ってるんだけど4.1.1でgradleで実行したらこんなエラーがでた。

設定

buildscript {
    ext {
        postgresqlVersion = '9.4.1212'
    }
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath "gradle.plugin.com.boxfuse.client:flyway-release:4.1.1"
        classpath 'org.postgresql:postgresql:9.4-1201-jdbc41'
    }
}
Unable to instantiate JDBC driver org.postgresql.Driver 

version4.1.1だと起こるらしい。version4.1.0に戻したら実行できた。
postgresqlだけかなー。直るのを待とう。