Flywayを最初からやってみる
きっかけ
この素晴らしき記事を写経していた時である。
(ほんとに素晴らしいのでみんなも写経しような)
SpringBoot+Vue.js+ElementUI+Firebaseでマスタ管理アプリ入門
Flyway…すでにあるファイルをコピペでバージョン増やしてるだけで自分でイチからやったことないな…
そもそも、バージョンってどういう仕組みやねんという酷い状況だったので改めてやっていきましょう。
今回のリポジトリはここ。
github.com
環境を作ろう
プロジェクトを作ろう
Spring Initializrでオリャっとひな形を作ります。
dependenciesの設定、Flywayまであるのね。
DBはお手軽H2DBでやります。
あとはお好きなIDEで読み込みましょう。
H2の接続設定をしよう
application.properties
にH2の接続設定を追加します。
あと今回はh2のconsoleで結果を確認するのでspring.h2.console.enabled=true
も入れる。
メモリ上のtest
という名前のDBに接続するよって感じです。
# H2 spring.h2.console.enabled=true # Database spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_ON_EXIT=TRUE spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=
マイグレーション用のSQLファイルを作ろう
ここによると、クラスパスのdb/migration
の下にSQLファイルを作ろうな。
ということらしい。
Migrations - Migrations - Flyway by Boxfuse • Database Migrations Made Easy.
V1__create_table.sql
CREATE TABLE `person` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `name` VARCHAR(64) NOT NULL, PRIMARY KEY (`id`) )
実行して様子を見てみよう
よいしょっとアプリケーション起動してみましょう。
mainからでもbootRunでも起動できればそれでよい。
2018-10-13 10:53:07.033 INFO 6152 --- [ main] o.f.core.internal.util.VersionPrinter : Flyway Community Edition 5.0.7 by Boxfuse 2018-10-13 10:53:07.038 INFO 6152 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2018-10-13 10:53:07.190 INFO 6152 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2018-10-13 10:53:07.196 INFO 6152 --- [ main] o.f.c.internal.database.DatabaseFactory : Database: jdbc:h2:mem:test (H2 1.4) 2018-10-13 10:53:07.268 INFO 6152 --- [ main] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.025s) 2018-10-13 10:53:07.314 INFO 6152 --- [ main] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table: "PUBLIC"."flyway_schema_history" 2018-10-13 10:53:07.348 INFO 6152 --- [ main] o.f.core.internal.command.DbMigrate : Current version of schema "PUBLIC": << Empty Schema >> 2018-10-13 10:53:07.349 INFO 6152 --- [ main] o.f.core.internal.command.DbMigrate : Migrating schema "PUBLIC" to version 1 - create table 2018-10-13 10:53:07.370 INFO 6152 --- [ main] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "PUBLIC" (execution time 00:00.063s)
こんなログが出てればうまくいってそうな雰囲気。
H2 consoleで実際にテーブルができているか確認しに行く。
デフォルトだとこれでアクセスできる。
http://localhost:8080/h2-console
こんな感じでオイショっと接続。
無事できてますね。
flyway_schema_history
という作った覚えのないテーブルもありますね。
各マイグレーションファイルごとに適用済みかそうでないかのような内容っぽい。
マイグレーションファイルを追加してみよう
INSERT文でデータを突っ込んでみる。
V1.1__insert_data.sql
INSERT INTO person VALUES (1, 'hoge-san'); INSERT INTO person VALUES (2, 'piyo-san');
実行後。
なるほど、すべて理解しましたワ。