Spring Boot で開発環境の組み込みDB(h2)とリリース用データベース(SQL Server)でFlywayを共存させる
1724 ワード
前提
- 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';
spring.jpa.hibernate.ddl-auto=update
- アプリを起動する度にデータベースを初期化する
- 今回は SQL Server
- 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';
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';
Author And Source
この問題について(Spring Boot で開発環境の組み込みDB(h2)とリリース用データベース(SQL Server)でFlywayを共存させる), 我々は、より多くの情報をここで見つけました https://qiita.com/Yoshihiro-Hirose/items/327c29ab3f61ede9e0dd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .