2016-08-08 4 views
1

Liquibase:変更セットIDのみを識別する方法は? LiquiBaseをドキュメントあたりとして

各チェンジタグを一意 「ID」タグ、「著者」タグ、及び変更ログファイルクラスパス名の組み合わせによって識別されます。

これはデザインの選択肢が非常に悪いようです。チェンジセットのアイデンティティは、その場所にリンクされるべきではありません。変更ログが自動アプリケーションデプロイメントによって実行される場合、チェンジセットはJARファイル内のクラスパスの場所から取得されます。手動でコマンドラインから同じチェンジセットを実行する場合は、その場所が現在のディレクトリである可能性があります。

この場合、IDに基づいて同じチェンジセットを認識するのではなく、liquibaseはそれを2度適用しようとします。 この動作を変更して、変更セットのみを指定したIDを特定する方法はありますか?

答えて

3

logicalFilePathという属性をdatabaseChangeLogタグとして使用することをおすすめします。

これにより、プロジェクトのディレクトリ構造を自由に変更できます。 また、ファイル名が(場合によっては起こりうる)絶対パスとして格納されないようにします。

+0

これは、XML変更ログでも使用可能なようです。 SQLの変更履歴で使用できるかどうか知っていますか? –

+0

いいえ、私が知っている限り。 – binoternary

0

ソースコードを操作して独自のバージョンのliquibaseを再コンパイルした場合のみ。

実際にデザインは問題ありません。間違って使用してください。 e。 g。それぞれのチームが異なるリキーベースファイルにチェンジセットを保持する大きなチームを持っている場合、異なるチームが同じIDを使用できるため、ファイル名を考慮しないと致命的になります。

Liquibaseを常に同じ方法で呼び出していることを確認してください。チェンジセットのIDは変更されません。

+0

パスを使用すると、識別に適した設計の選択肢にはなりません。大規模なチームの著者では、IDは変更を識別するのに十分なはずです。そうでなければ、リバース・ドメインやプロジェクト名のようなidの規約を採用することができます。最後に、パスのないファイル名だけです。しかし、あなたが正しいです、再コンパイルせずにこの動作を変更する方法はないようです。 –

1

@ binoternaryの回答が働いています。しかし、問題は、logicalFilePathはXMLチェンジセットでのみ使用できますが、私はSQLチェンジセットを使用していました。回避策は、XMLチェンジセットを作成して、次のようにSQLを追加することです。

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog 
     http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"> 

    <changeSet id="new-tables" author="kshitiz" logicalFilePath="new_tables.sql"> 
     <sqlFile path="new_tables.sql" relativeToChangelogFile="true" /> 
    </changeSet> 
</databaseChangeLog> 
関連する問題