冥冥乃志スマートフォン用の表示で見る冥冥乃志ソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。この広告は、90日以上更新していないブログに表示しています。2016-04-21gradleのマルチプロジェクト環境でマイグレーション専用のプロジェクトを作った話Programmingタイトルだけで何をやったか想像がついた方はお疲れ様でした。かんだはまりながらたどり着いたので、もっとできる人からもっと効率の良いやり方のまさかりが飛んでくることを期待しつつ。背景Webアプリケーションとバッチで構成されるサービスWeb側についてはアクセス数に応じてスケールさせやすくしておきたいバッチはデータ量が極端に増えないのであまりスケールを考えなくてもいいどうせ同じEntityモデルとか使うしWebとバッチでリポジトリは分けたくない一応、Webアプリケーションとバッチはdocker(でなくてもいいけど)でスケールしやすい構成にしようかと思っています。Webアプリケーションは複数だし、バッチもあるし、必ずしも両方リリースする戸言うことは考えられないし、デプロイ時にDDLのauto-generateやってしまうのはあまり得策ではないなあ、と思ったので、マルチプロジェクトにしてマイグレーション専用のサブプロジェクトを作ることにしました。マイグレーションを行うプロジェクトgradleのマルチプロジェクトの組み方については公式ドキュメントを見るなりしてください。ここは特に難しい話ではなかったし、でてくるサンプルと同じレベルのことしかしていません。すべてのプロジェクトに対してSpringBootに依存関係を取っています。依存関係を取っていて、EntityやUtilityを共有しつつ、それぞれの目的にあったアプリケーションを構築する、というプロジェクト構成にしています。マイグレーションプロジェクトでやりたいことFlywayを使ったデータベースのバージョニングとマイグレーションの実行HibernateのDDL-AUTO機能を使ったEntityとスキーマのバリデーション本当はEntity修正したらDDL差分を作ってマイグレーションスクリプトに、とかやれるといいんですけどね、作る手間を考えてそこはレビューで潰す、という方向にしてます(とりあえず)。Flywayを使ったマイグレーションマイグレーションにはFlywayを使います。Easy.gradleプラグインの導入についても公式にドキュメントはありますが、これはシングルプロジェクトでの導入です。}}上記設定をしてから以下のgradleタスクを実行すると、マイグレーションプロジェクト配下にあるマイグレーションスクリプトを実行してくれます。いうテーブルもできます。Flywayはこのテーブルを使ってマイグレーションスクリプトの実行を制御するので、これは削除しないように注意しましょう。Flywayのgradleプラグインには、以下のとおりほかにもコマンドラインと同じ一通りの実行環境が揃っているので、gradleタスクを使って一通りのマイグレーション処理は実施できます。project.extのいずれかを選択することができます。今回はコマンドラインオプションに指定しました。設定関連の詳細は以下を見てください。)だったり、callbacksでFQCNを指定するとコールバック処理を指定することが可能だったり、結構高機能です。DBMSはMySQLを検証環境を作ってみたのですが、幾つかつまらなーいことでハマってしまったのが恥ずかしい。*3レビュー、リリース手順についてで、最終的に以下のようなコマンドでマイグレーションとEntityのバリデーションを一括でやってもらいます。-iこれで、WebアプリケーションとバッチアプリケーションからテーブルのマイグレーションとEntityのバリデーションを切り離しました。これ以降の扱いや流れについては以下のようになるのかなあ、と思っています。Entityの変更時には最新のデータベースに対してvalidationを行うレビュアーもvalidationはしてみようマイグレーションしてからアプリケーションのリリースという手順アプリケーション実行時にDDLの自動生成はしないしvalidationもしないまあ、もっといい方法があれば変えていこうとは思っていますが。Bootそもそも...2015-05-21Grailsを味見してみた気まぐれに技術系のエントリ。»プロフィールid:mao_instantlifeソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。月別アーカイブ参加グループプログラミングはてなブログをはじめよう!mao_instantlifeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。