【问题标题】:Liquibase maven: Cannot find changelog location when spring-boot startsLiquibase maven:spring-boot启动时找不到更改日志位置
【发布时间】:2018-12-14 16:38:01
【问题描述】:

我的 liquibase maven 插件配置是:

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>${liquibase.version}</version>
    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>${postgresql.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <skip>${liquibase.skip}</skip>
        <propertyFileWillOverride>true</propertyFileWillOverride>
        <changeLogFile>src/main/resources/db.changelog-master.xml</changeLogFile>
        <propertyFile>src/main/resources/${project.artifactId}-liquibase.properties</propertyFile>
        <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
    </configuration>
</plugin>

我在启动 spring-boot 时收到此错误消息:

org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration$LiquibaseConfiguration”的bean时出错:调用init方法失败;嵌套异常是 java.lang.IllegalStateException:找不到更改日志位置:类路径资源 [db/changelog/db.changelog-master.yaml](请添加更改日志或检查您的 Liquibase 配置)

我不太明白为什么在我设置后 liquibase 会尝试选择这个更改日志文件 db/changelog/db.changelog-master.yaml

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

我的更新日志:

<?xml version="1.0" encoding="UTF-8"?>
<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.6.xsd">

    <changeSet author="ddd" id="tdev-forum-service-1"
        context="dev, int, rel" labels="tdev-forum-service">
        <createTable tableName="TDEV_FORUM" remarks="Discussions about shared code">
            <column name="FORUM_ID" type="VARCHAR(36)">
                <constraints nullable="false" primaryKey="true" />
            </column>

            <column name="TOPIC_NAME" type="VARCHAR(128)">
                <constraints nullable="false" />
            </column>

            <column name="TOPIC_CATEGORY" type="VARCHAR(32)">
                <constraints nullable="false" />
            </column>

            <column name="SOURCE_CODE_ITEM_ID" type="VARCHAR(36)">
                <constraints nullable="false" />
            </column>

        </createTable>

    </changeSet>



    <changeSet author="ddd" id="tdev-forum-service-2"
        context="dev" labels="tdev-forum-service">

        <insert tableName="TDEV_FORUM">
            <column name="FORUM_ID" value="36afbfcd-969d-4a0e-9d63-25bd9d4e8f6b" />
            <column name="TOPIC_NAME" value="How to read a text file using streams" />
            <column name="TOPIC_CATEGORY" value="I/O Streams" />
            <column name="SOURCE_CODE_ITEM_ID" value="4600eab2-c375-4b99-97ab-9670ed93f861" />
        </insert>

        <rollback>
            <delete tableName="TDEV_FORUM">
                <where>FORUM_ID='36afbfcd-969d-4a0e-9d63-25bd9d4e8f6b'</where>
            </delete>
        </rollback>
    </changeSet>



    <changeSet author="ddd" id="tdev-forum-service-3"
        context="dev, int, rel" labels="tdev-forum-service">
        <createTable tableName="TDEV_FORUM_MESSAGE" remarks="Messages from developers">
            <column name="MESSAGE_ID" type="VARCHAR(36)">
                <constraints nullable="false" primaryKey="true" />
            </column>

            <column name="FORUM_ID" type="VARCHAR(36)">
                <constraints nullable="false" />
            </column>

            <column name="CONTENT" type="TEXT">
                <constraints nullable="true" />
            </column>

        </createTable>

    </changeSet>

    <changeSet author="sdd" id="tdev-forum-service-4"
        context="dev, int, rel" labels="tdev-forum-service">

        <addForeignKeyConstraint baseColumnNames="FORUM_ID"
            baseTableName="TDEV_FORUM_MESSAGE" constraintName="FK_MESSAGE_FORUM"
            deferrable="true" initiallyDeferred="true" onDelete="CASCADE"
            onUpdate="RESTRICT" referencedColumnNames="FORUM_ID"
            referencedTableName="TDEV_FORUM" />
    </changeSet>

</databaseChangeLog>

【问题讨论】:

    标签: java spring maven spring-boot liquibase


    【解决方案1】:

    默认情况下,Spring Boot 期望您使用 yaml 格式的变更集文件而不是 xml。 而且位置db/changelog/db.changelog-master.yaml 似乎是default value

    所以我猜这些默认值的覆盖在你的情况下不起作用。

    这里是documentation,关于如何在 Spring Boot 中覆盖它。

    据我所知(我不使用 Spring Boot)您需要在 application.properties 中设置属性 spring.liquibase.change-log

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 2015-01-27
      • 2021-11-30
      • 2017-06-18
      • 2019-05-30
      • 2021-10-23
      • 2015-06-18
      • 1970-01-01
      • 2018-09-24
      相关资源
      最近更新 更多