如何正确配置Liquibase insert中valueBlobFile的文件路径?
解决Liquibase执行insert时BLOB资源找不到的问题
问题原因
Liquibase解析valueBlobFile的路径基准是当前变更集文件所在的目录,而非项目根目录或src/main/resources目录。你之前使用的../../../db/changelog/xxx路径是从变更集目录向上跳转三级,与实际文件位置不符,导致资源找不到。
正确路径配置方案
根据你的文件位置(src/main/resources/db/changelog),提供两种可靠的配置方式:
1. 相对路径(基于变更集文件位置)
如果你的变更集XML文件本身就放在src/main/resources/db/changelog目录下,直接使用文件名即可(文件与变更集同目录):
<changeSet author="Krishna" id="insert-3"> <insert tableName="blob_test"> <column name="name" value="Name3" /> <column name="formData" type="longblob" valueBlobFile="dc_form_definition_202304051700.csv-1.data.txt"/> </insert> </changeSet>
若变更集在子目录(比如db/changelog/v1),则使用相对上级目录的路径:
valueBlobFile="../dc_form_definition_202304051700.csv-1.data.txt"
2. Classpath绝对路径(推荐)
使用classpath:前缀直接从src/main/resources根目录定位文件,不受变更集文件位置影响,适配性更强:
<changeSet author="Krishna" id="insert-3"> <insert tableName="blob_test"> <column name="name" value="Name3" /> <column name="formData" type="longblob" valueBlobFile="classpath:db/changelog/dc_form_definition_202304051700.csv-1.data.txt"/> </insert> </changeSet>
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

