私のアプリケーションには次のシナリオがあります。
- 1本番サーバー
- 1テストサーバー
- n開発用コンピューター
データベースの移行では、スキーマにHibernate Schema Updateを使用し、すべての本番データ(すべてのサーバー/コンピューター)にDBUnitを入力します。スキーマの更新が完了すると、新しいスキーマの新しいDTDファイルが生成されるため、DBUnitXMLの新規インポートを実行できます。アプリケーションは、起動時にXMLファイルでデータベースを更新します(開発およびテストサーバー/コンピューターのみ!)
もちろん、このアプローチは最適で壊れやすいものではありません。そこで、LiquibaseとFlywayを見ました。どちらも優れたツールのようですが、私が得られないのは、データを移行するにはどうすればよいですか?私の場合、本番システムのデータを週に1回ダンプし、それをDBUnit XMLファイルとしてアプリケーションソース管理に追加します。これにより、すべての開発者が「新しい」データを持ち、テストサーバーも現在の本番データを持ちます。
LiquibaseとFlywayで私が目にする問題は、データベースデータから自動差分を実行し、移行の変更を自動的に生成する方法がないことです。
だから私の考えは次のステップで次のとおりです:
- 更新ではなく検証するようにHibernateを設定します。
- STRUCTURALデータベースの変更が必要な場合は、メジャーバージョンの移行スクリプトに追加します
- 移行スクリプトにはデータベースの挿入はありません。
- 新しいデータベース構造に基づいて、DBunitの新しいDTDを生成します
- 本番データベースからDBUnitXMLを生成します。
もう1つのアイデアは、flyways JavaMigrationを利用して、DBUnitに基づく初期データベースダンプを提供することです。データベースデータの他のすべての変更は、移行スクリプトで処理されます。しかし、それでも問題があります。現在の移行スクリプトの状態と本番データベースの状態との差分を作成するにはどうすればよいですか。
誰かが私のシナリオを処理する方法のヒントを私に提供できれば素晴らしいでしょう:)