web-dev-qa-db-ja.com

MavenとSpringの両方を介したliquibaseファイルパスの使用

次のBeanを使用して、Springコンテキストでスキームと初期データを更新します。

<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
    <property name="dataSource" ref="dataSource" />
    <property name="changeLog" value="classpath:db/changelog/db.changelog-master.xml" />
    <property name="dropFirst" value="true" />
</bean>

また、Maven liquibaseプラグインを使用して、作成されたテーブルなどを確認するためのSQLスクリプトを生成します。

 <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>2.0.5</version>
                <configuration>
                    <!--mvn initialize liquibase:updateSQL-->
                    <propertyFile>src/main/resources/db/config/liquibase-gensql-data-access.properties</propertyFile>
                    <changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile>

                </configuration>
           </plugin>

db.changelog-master.xml fileには、子liquibase変更ログファイルが含まれます。問題は、マスターからそれらをどのように参照するかです。 Springを使用する場合、クラスパスを介して次のパスを使用する必要があります。

<include file="classpath:/db/changelog/db.changelog-1.0.xml"/>

Mavenを使用する場合、パスは次のとおりです。

<include file="src/main/resources/db/changelog/db.changelog-1.0.xml"/>

どちらの場合も同じ構成にしたいのですが。どうすればアーカイブできますか?

16
Alexandr

私はイゴールの答えにコメントしました、彼の解決策はうまくいかないようです。

これを解決するために、Liquibaseにパッチをプッシュしました: https://github.com/liquibase/liquibase/pull/187 。これは3.0.6-SNAPSHOTでマージされる必要があるため、3.0.6でまもなく利用可能になります。

この変更により、次の追加行でSpringLiquibaseを構成できるようになりました。

<property name="ignoringClasspathPrefix" value="true" />

この変更が必要な別の例/ユースケースはここにあります: https://github.com/LateralThoughts/spring-liquibase-extensions

9
Rolf

Mavenパスをから変更すると思います

<changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile>

<changeLogFile>db/changelog/db.changelog-master.xml</changeLogFile>

含まれているすべてのファイルのdb.changelog-master.xmlファイルを更新して、src/main/resourcesディレクトリからの相対パスを使用すると、問題が修正されます。

同じパスを使用して、Liquibaseを呼び出すSpring、Maven、統合テストのchangeLogファイルを使用してこの問題を解決しました。すべての変更ログファイルは、プロジェクト内のMavenモジュールの1つにある/ src/main/resources/dbディレクトリにあります。

Liquibaseを実行するMavenプロファイル、通知パス:db/masterChangeLog.xml

<plugin>
                    <groupId>org.liquibase</groupId>
                    <artifactId>liquibase-maven-plugin</artifactId>
                    <version>3.0.2</version>

                    <executions>
                        <execution>
                            <id>*** Install a last major release version of db ***</id>
                            <phase>process-resources</phase>
                            <goals>
                                <goal>update</goal>
                            </goals>
                            <configuration>
                                <changeLogFile>db/masterChangeLog.xml</changeLogFile>
                                <contexts>dbBuildContext, dmlDevContext</contexts>
                                <propertyFile>db/liquibase-${user.name}.properties</propertyFile>
                                <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                                <logging>debug</logging>
                            </configuration>
                        </execution>

db/masterChangeLog.xmlファイルには、次のファイルが含まれています。

<include file="db/install.xml"/>
<include file="db/update.xml"/>

db/install.xmlファイルには他の変更ログファイルが含まれています(update.xmlも同様です)。

<includeAll path="db/install/seq"/>
<includeAll path="db/install/tab"/>
<includeAll path="db/install/cst"/>
<includeAll path="db/latest/vw"  />

Springコンテキストは、アプリの起動時に次のように同じデータベーススクリプトのセットを実行します。

<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
    <property name="dataSource" ref="baseCostManagementDataSource" />
    <property name="changeLog" value="classpath:db/masterChangelog.xml" />
    <property name="contexts" value="dbBuildContext, dmlDevContext" />
</bean>
11
Igor Vash

各databaseChangeLogファイルでlogicalFilePath属性を指定します。 http://www.liquibase.org/documentation/databasechangelog.html を参照してください

1
user2164990

Mavenプラグインには、最近のバージョンの構成プロパティchangeLogDirectoryがあります。

したがって、設定<changeLogDirectory>src/main/resources</changeLogDirectory>あなたが望むことを達成する必要があります。

0
Elias Mueller