背景
- Gradle 4 + MySQL 5.7 + Spring Boot 1.5 で開発
- 勤務先はシンクライアントに近い環境。社則で毎日退社前に個人PC上のデータを消す必要がある (アプリは別)
- → マイグレーションツール必須
- どうせならステージング環境等のDBマイグレーションも開発に使っているものと同じツールを使って省力化したい
- でも Spring Boot + flyway-core の強制自動マイグレーションは怖い
→ サーバ用の SQL 配布アーカイブに、Flyway タスクのみを入れた build.gradle を足してみます。
サーバに配布する build.gradle
plugins {
id 'org.flywaydb.flyway' version '3.2.1'
}
// java プラグインを入れないと JDBC ドライバの dependencies を解決してくれない
apply plugin: 'java'
flyway {
url = 'jdbc:mysql://localhost/foo'
user = xxx
password = xxx
}
flywayClean.enabeld = false // 誤爆防
repositories {
jcenter()
}
dependencies {
runtime group: 'mysql', name: 'mysql-connector-java', version: '5.1.44'
}
展開して ./gradlew flywayMigrate
で SQL を適用できます。
なお Gradle のキャッシュは $HOME/.gradle
に入ります。
サーバ用 SQL 配布アーカイブを作成するための Gradle タスク
tarball は build/distributions/
以下に作成されます。
task sqlDist(type: Tar) {
compression = Compression.GZIP
archiveName = "${baseName}-sql-${version}.tar.gz"
// SQL files
into('src') {
from 'src'
include 'main/resources/db/migration/**'
}
// Gradle Wrapper
into('/') {
from 'config/flyway'
include 'build.gradle'
}
into('/') {
from '.'
include 'gradlew'
}
into('gradle') {
from 'gradle'
}
}