2

Spring、JPA / Hibernate、MS SQL Server/PostgreSQLを使用してJavaWebアプリケーションを開発しています。インストールされているシステムのデータベースの移行を簡単にするために、Liquibaseを統合して、アプリケーションの起動時に自動的に更新を実行したいと思います。現在、私は常に正しい順序で手動で実行する必要がある更新スクリプトを作成しています。

Springとの統合をテストしたところ、非常に迅速に機能するようになりました。Liquibaseのメタテーブルは最初のチェンジセットで作成され、変更を実行します。問題は、すでにいくつかのシステムがインストールされていることですが、将来的には他のインストールが行われる可能性があります。

Liquibaseを使用して、データベースが空であるかどうかを検出し、新しくインストールしたシステムでDDLを自動的に実行することは可能ですか?それ以外の場合は、手動でDDLを実行してから、アプリケーションを起動する必要があります。

私が欲しいのは、データベースが空のときに自動的に初期化されるか、データベースがすでに存在する場合は更新されることです。Liquibaseでそれを行う可能性はありますか、それともこれを機能させるためのトリックはありますか?

4

2 に答える 2

3

既存のスキーマを持つ既存のシステムでliquibaseを使い始める場合、基本的に2つのオプションがあります。

  1. すべてのデータベースが既知の開始点から開始すると想定します。この時点に到達するために、liquibaseの外部で必要なことをすべて実行します(スナップショットから復元する、手動でビルドするなど)。

  2. liquibase generateChangeLogコマンドを使用して、既存のデータベースのchangeSetを作成します。これは新しいデータベースでのみ実行する必要があるため、カスタムのliquibase spring統合呼び出しを使用するか、生成されたchangeLogを最初に<preConditions onFail="MARK_RAN"><not><tableExists tableName="table name here"/></not></preConditions>ブロックを使用して1つのchangeSetに折りたたむことでこれを制御できます。

于 2012-03-09T21:09:16.727 に答える
0

Liquibaseを使用して、データベースが空であるかどうかを検出し、新しくインストールしたシステムでDDLを自動的に実行することは可能ですか?

さて、あなたが言ったように、

Liquibaseのメタテーブルは最初のチェンジセットで作成され、変更を実行します。

したがって、DDLステートメントがチェンジセット(おそらく最初のチェンジセット)の中にある場合は、すべてが正常であるはずです。

Liquibaseでそれを行う可能性はありますか、それともこれを機能させるためのトリックはありますか?

はい、それはトリックなしで可能であるはずです。

于 2012-03-07T13:21:51.810 に答える