Spring Boot 在Liquibase 4中删除了通过绝对路径指定文件,0

t2a7ltrp  于 2023-04-30  发布在  Spring
关注(0)|答案(6)|浏览(291)

我在运行Sping Boot 应用程序时收到以下liquibase错误:

在Liquibase 4中删除了通过绝对路径指定文件。0.请使用相对路径或在类路径参数中添加“/”。

下面是应用程序中的类路径。亚姆勒:

liquibase:
    change-log: classpath:db/changelog/db-changelog-master.xml

我也试过:

liquibase:
    change-log: classpath:/db/changelog/db-changelog-master.xml

以下是文件夹结构:

Changlog master:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">

    <include file="db-changelog-1.0.xml"/>
</databaseChangeLog>
dgenwo3n

dgenwo3n1#

我在将changelog文件放在resources文件夹之外时遇到了这个问题,但是如果我将它们包含在 resources/db/changelog 下,那么设置下面的配置就可以正常工作。

spring.liquibase.change-log=classpath:/db/changelog/changelog-master.xml

在4下测试。6.2

brjng4g3

brjng4g32#

不幸的是,这仍然是一个悬而未决的问题。参见2281

esyap4oy

esyap4oy3#

这似乎是在v4中修复的。4.3

8qgya5xd

8qgya5xd4#

只需尝试从“change-log:“参数中删除“classpath:“即可。也试着检查你的POM。xml(配置中的“changeLogFile”标记):更改日志文件路径前不应有“${basedir}”。

<changeLogFile>
  /src/main/resources/liquibase/changelog.xml
</changeLogFile>
v8wbuo2f

v8wbuo2f5#

here所示
Liquibase类路径在版本4之前是如何工作的。0
版本4之前。0,Liquibase添加到类路径的默认位置之一是文件系统中的根目录(/)。由于依赖于计算机的更改日志路径,例如/home/my-user/projects/liquibase/changelog,更改导致了问题。xml,位于/目录下。这样,Liquibase将给定路径用作存储在DATABASE ECHANGELOG表中的变更集标识符的一部分,并且当您从/home/other-user/projects/liquibase/changelog运行Liquibase时。xml,Liquibase将其视为不同的变更日志,并尝试重新运行所有以前运行的变更集。
为了防止发生标识问题,删除了类路径的默认部分/。Liquibase类路径在4.0及更高版本
从Liquibase 4开始。0,根目录(/)不再是类路径的默认部分,因为上一节中提到的问题。
...
消息“请使用相对路径或将'/'添加到类路径参数。“指的是根目录'/',并不意味着在类路径的开头添加斜杠。Afaik、classpath:xclasspath:/x是相同的。
此外,无论出于何种原因,当找不到主更改日志时,该消息会出现,因此打字错误也可能导致该消息。这只是一个提示,告诉您可能找不到它,因为文件不在类路径上,因为他们从类路径中删除了根目录,但也找不到它,因为您指定了错误的路径(我刚刚这样做了)。
要正确配置它,主更新日志必须位于Liquibase类路径上。在Sping Boot 中,Liquibase classpath被设置为应用程序的classpath,i。例如,您可以使用src/main/resources
Tl;dr:当您的文件是src/main/resources/db/changelog/db.changelog-master.xml时,使用spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master.xml
我不知道,在某些Liquibase版本中是否有或有一个bug,但无论如何,这就是它的工作方式。

pdkcd3nj

pdkcd3nj6#

我也有同样的问题。在我的例子中,我发现我们在pom中配置了一个资源过滤maven插件。xml和Liquibase SQL更改日志文件不包括在内。
下面的代码为我工作

<build>
    <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.sql</include>
            </includes>
        </resource>
    </resources>
</build>

相关问题