liquibase相对路径问题,以及升级版本带来的路径问题

本文记录了在使用Liquibase时遇到的两个问题:一是由于Liquibase 4.0版本不再支持绝对路径,导致sqlFile无法找到,通过检查Maven资源打包配置解决了;二是SpringBoot升级到3.0.x后,liquibase启动报错,发现新版本对sqlFile路径解析方式变化,通过修改路径表达式恢复正常。
部署运行你感兴趣的模型镜像

一,记一次liquibase错误

Specifying files by absolute path was removed in Liquibase 4.0. Please use a relative path or add ‘/’ to the classpath parameter.

在使用liquibase的时候,changelog的sqlFile找不到对应的sql文件:

在这里插入图片描述

<!-- changelog.xml -->
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<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
                   https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.5.xsd">
  
    <changeSet author="mrzhang" id="reference-20230101-1400">
        <sqlFile path="../sql/mysql_init_data.sql" relativeToChangelogFile="true" />
    </changeSet>
</databaseChangeLog>

项目结构层级:

在这里插入图片描述

按理说liquibase启动的时候是可以找到sql文件的,如果去看liquibase的原码,会发现在4.x版本中默认是相对路径,sqlFile 的path属性会默认在前面拼接一个classpath*:,此处项目启动仍然找不到对应文件。寻求官方,发现一个PR:https://github.com/liquibase/liquibase/pull/2758,发现可能是Maven打包的问题

可恶的Maven果然没有把我的sql文件打包

在这里插入图片描述

再查看pom.xml发现在resources标签中没有将.sql文件包含在内,加上之后就可以了,启动无误~

在这里插入图片描述

二,升级SpringBoot遇到的liquibase问题

今天把Boot版本从2.7.x更新到了3.0.x,然后解决一些jar包和依赖的问题之后,liquibase报错!项目无法启动了。

Error creating bean with name ‘liquibase’ defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]

  仔细查看报错信息,发现是某个sql文件找不到对应的文件了,导致FileNotFoundException

image-20230304235328293

可是按理说,为啥我没升级前不报错呢,莫非升级了就找不到这个文件了?先看一下我liquibase的目录结构层次,以及changelog咋写的:

image-20230304235507999

<!--changelog_v1.0.xml-->
<changeSet id="reference-20230101-1400" author="zhangyong">
    <sqlFile path="../sql/mysql_init_data.sql" relativeToChangelogFile="true" />
</changeSet>

在报错的地方打断点看看:

image-20230304235710854

  发现问题了,这个路径不应该是classes/sql而应该是classes/db/sql。可以得出,旧版本的sqlFile标签中的path是根据自己本身的文件所在位置进行查找,而新版本如果写了…/则是会直接在resources目录下查找文件,从而导致了路径异常。

  将上述中sqlFile的path属性改为../db/sql/mysql_init_data.sql或者sql/mysql_init_data.sql,问题解决。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值