You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liquibase SQL变更集加载CSV文件抛出FileNotFoundException问题求解

问题根因

你使用的MySQL原生LOAD DATA LOCAL INFILE命令仅能读取运行MySQL客户端(此处为Wildfly进程)所在服务器的文件系统实体文件,无法直接读取打包在WAR包内部的类路径资源。即使CSV文件被打包进WAR,只要没有解压到文件系统生成实体文件,该命令就无法识别WAR内部路径,所以你尝试的各类路径写法都会触发FileNotFoundException。

推荐解决方案(符合SQL风格变更集规范)

不用XML格式,直接使用Liquibase SQL变更集内置的loadData能力,该能力支持直接读取类路径下的CSV资源,无需依赖MySQL原生加载命令,写法如下:

-- changeset user:insert-prices-data-temp-table
-- loadData file="prices.csv" tableName="prices_temp" separator="," quoted="true" ignoreHeaderLine="true" encoding="UTF-8"

因为你的CSV文件和SQL变更集存放在同一目录下,直接填写CSV文件名即可,Liquibase会自动从当前变更集所在的类路径定位资源,不需要额外处理部署后的路径问题。

备选方案(必须使用MySQL原生LOAD DATA的场景)

如果业务要求必须使用原生LOAD DATA命令,可按以下步骤操作:

  • 修改Wildfly部署配置,开启WAR包部署时自动解压到本地文件系统的开关
  • 在变更集中通过系统变量获取Wildfly的解压部署目录,拼接出CSV文件的实体文件绝对路径
  • 动态拼接LOAD DATA命令执行
    该方案需要适配不同环境的部署路径规则,维护成本较高,非必要不建议使用。
额外检查项

你当前主变更日志的<includeAll>配置中filter="xml"为正则匹配规则,仅会加载文件名匹配xml规则的变更集,如果你的SQL变更集后缀为.sql,需要将filter修改为filter=".*\\.sql",否则SQL变更集会被过滤无法执行。

内容的提问来源于stack exchange,提问作者tomaytotomato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:09:02