10

私たちのアプリケーションでは、liquibase を使用します。コマンドラインから(本番環境で手動で)、アプリケーションの起動時に自動的に(テスト環境など)DB移行を実行する必要があります。

問題は、Liquibase がファイル名全体を変更セットの ID の一部と見なすため、パスが異なる場合に変更セットを再適用しようとすることです。たとえば、db-changelog ファイルへの「完全修飾パス」VS「相対パス」の場合。

FILENAME列のチェックを無効にする方法は?

4

3 に答える 3

17

これに基づいて、アプローチは次のようになります。

databaseChangeLog 要素とすべての changeSet 要素の両方で、必ず logicalFilePath 属性を使用してください。

例:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog logicalFilePath="does-not-matter" 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-2.0.xsd">

    <changeSet logicalFilePath="path-independent" author="authorId" id="1">
        ...
    </changeSet>

</databaseChangeLog>

その結果、すべての変更セットの FILENAME 列に「パスに依存しない」が含まれ、チェックが省略されます。

于 2013-11-13T16:55:22.920 に答える
3

@snowindyの答えは良いです。別の方法として、com/example/changelog.xml などのクラスパス相対の方法で、いつでも changeLog を参照できます。両方の環境でクラスパスを正しく構成すると、同じ「com/example/changelog.xml」を使用できます。

于 2013-11-13T18:45:16.117 に答える