2017-12-08 17 views
0
@Bean 
public SpringLiquibase liquibase() { 
    SpringLiquibase liquibase = new SpringLiquibase(); 
    liquibase.setDataSource(vsDataSource());   
    liquibase.setChangeLog("classpath:liquibase/avt_changelog_master.xml"); 
    return liquibase; 
} 

これは私が春のブートアプリケーションを通してliquibaseを初期化する方法です。Liquibaseは既に実行されているチェンジセットを実行しようとしていますので、すでにテーブルが存在するエラーを投げています

私はdatabasechangelogテーブルをチェックしましたが、そのチェンジセットエントリが存在し、正常に実行されていることがわかりました。

なぜliquibaseがそのチェンジセットをスキップしていないのか、新しいユニークチェンジセットIDを実行していないのですか?

答えて

1

変更履歴の名前に問題がある可能性があります。あなたが他のアプリケーション/ maven/...の中からその変更ログを実行した場合、logicalFilePathを指定しなかった場合、liquibaseはそれを別の変更ログと考えることができます。チェンジログ定義にlogicalFilePathを設定して、それを実行しようとしてください。

これは一例です:

<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.5.xsd" logicalFilePath="db-changelog-master.xml">

+0

こんにちはこのソリューションが動作しませんでした。私は1つのマスターファイルavt_changelog_master.xmlを持っています。これには、異なるchangelogファイルへのパスが含まれています。通常、liquibaseがチェンジログのテーブルにチェンジセットIDのエントリを見つけたら、それをスキップする必要がありますが、私の場合、すでに実行されているチェンジセットを実行しようとしています。 –

関連する問題