LoginSignup
1
1

More than 3 years have passed since last update.

Spring Boot で開発環境の組み込みDB(h2)とリリース用データベース(SQL Server)でFlywayを共存させる

Last updated at Posted at 2020-02-21

前提

  • Spring Boot でデータベースを使うサーバアプリケーションを作る
  • hibernate を使っていて、データベースも初期化している。
    • spring.jpa.hibernate.ddl-auto=update
  • ローカルの開発環境は h2 を使った組み込み DB をオンメモリで起動
    • アプリを起動する度にデータベースを初期化する
  • リリース先ではもちろん永続化が必要なので別のデータベースに切り替える
    • 今回は SQL Server
  • データベースのスキーマ変更が必要になったので Flyway で構成管理したい

問題点

  • Flyway を適用して db/migration に SQL ファイルを置くが、2 種類のデータベースで競合する。
  • ローカルでの開発時は h2 を使うのでマイグレーションは不要
    • 毎回作り直しでオッケー
  • SQL Server を使う場合はマイグレーションして欲しい

解決方法

  • SQL ファイルを vendor 毎に分けて配置
  • h2 の場合はダミーの SQL ファイルを配置
  • Flyway の SQL が先に実行されるので hibernate の初期化は影響を受けない(テーブルが作成済みのため)
application.properties
spring.flyway.locations=classpath:db/migration/{vendor}
src/main/resources/
  db/
    migration/
      H2/
        V1_0_0__dummy.sql
      SQLSERVER/
        V1_0_0__Initial.sql
        V1_1_0__AddHoge.sql
V1_0_0__dummy.sql
select 'dummy';
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1