Liquibase SQL 变更集无法加载 CSV 文件:FileNotFoundException
Liquibase SQL Changeset Cannot Load CSV File : FileNotFoundException
对 Liquibase 变更集使用 SQL 风格的方法(这是我们的代码风格,我们不使用 XML)我正在尝试使用以下 SQL 加载 CSV 文件变更集
SQL
-- changeset user:insert-prices-data-temp-table
LOAD DATA LOCAL INFILE 'foo/src/main/resources/liquibase/changelogs/2021/prices.csv'
INTO TABLE prices_temp
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
将 WAR 文件部署到 Wildfly 时出现以下异常
java.io.FileNotFoundException:
foo/src/resources/liquibase/changelogs/2021/prices.csv (No such file
or directory) 2021-09-22T20:52:18.581085123Z at
java.io.FileInputStream.open0(Native Method)
2021-09-22T20:52:18.581087214Z at
java.io.FileInputStream.open(FileInputStream.java:195)
2021-09-22T20:52:18.581089768Z at
java.io.FileInputStream.(FileInputStream.java:138)
2021-09-22T20:52:18.581092029Z at
java.io.FileInputStream.(FileInputStream.java:93)
2021-09-22T20:52:18.581094150Z at
com.mysql.jdbc.MysqlIO.sendFileToServer(MysqlIO.java:3772)
Master Change 日志文件引用 2021 目录,SQL 和 CSV 文件存在于同一目录中。
<includeAll path="liquibase/changelogs/2021/" filter="xml" errorIfMissingOrEmpty="true" />
我尝试了以下其他路径,但它们仍然会产生 FileNotFoundException
- prices.csv
- liquibase/changelogs/2021/prices.csv
- WEB-INF/classes/liquibase/changelogs/2021/CCC-220-marking-time-prices.csv
- (绝对路径)/home/xxxx/Work/foo-service/foo/src/main/resources/liquibase/changelogs/2021/prices.csv
Liquibase 版本:3.5.1
Wildfly Jboss 版本 : 21
我检查过 WAR 文件中存在 CSV 文件
有什么解决办法吗?
问题是您正在尝试使用一些 mysql 函数 LOAD DATA LOCAL INFILE
,它不知道您的类路径。它正在尝试查看您的文件系统,但这样的路径不存在。即使您提供类似 yourapp.jar!liquibase/changelogs/2021/prices.csv
的内容,它也无法读取该文件。您需要将 prices.csv
从应用程序中拉出到文件系统并将 mysql 函数指向该位置。
或者,如果有帮助,您可以使用 liquibase 的 loadData。
对 Liquibase 变更集使用 SQL 风格的方法(这是我们的代码风格,我们不使用 XML)我正在尝试使用以下 SQL 加载 CSV 文件变更集
SQL
-- changeset user:insert-prices-data-temp-table
LOAD DATA LOCAL INFILE 'foo/src/main/resources/liquibase/changelogs/2021/prices.csv'
INTO TABLE prices_temp
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
将 WAR 文件部署到 Wildfly 时出现以下异常
java.io.FileNotFoundException: foo/src/resources/liquibase/changelogs/2021/prices.csv (No such file or directory) 2021-09-22T20:52:18.581085123Z at java.io.FileInputStream.open0(Native Method) 2021-09-22T20:52:18.581087214Z at java.io.FileInputStream.open(FileInputStream.java:195) 2021-09-22T20:52:18.581089768Z at java.io.FileInputStream.(FileInputStream.java:138) 2021-09-22T20:52:18.581092029Z at java.io.FileInputStream.(FileInputStream.java:93) 2021-09-22T20:52:18.581094150Z at com.mysql.jdbc.MysqlIO.sendFileToServer(MysqlIO.java:3772)
Master Change 日志文件引用 2021 目录,SQL 和 CSV 文件存在于同一目录中。
<includeAll path="liquibase/changelogs/2021/" filter="xml" errorIfMissingOrEmpty="true" />
我尝试了以下其他路径,但它们仍然会产生 FileNotFoundException
- prices.csv
- liquibase/changelogs/2021/prices.csv
- WEB-INF/classes/liquibase/changelogs/2021/CCC-220-marking-time-prices.csv
- (绝对路径)/home/xxxx/Work/foo-service/foo/src/main/resources/liquibase/changelogs/2021/prices.csv
Liquibase 版本:3.5.1
Wildfly Jboss 版本 : 21
我检查过 WAR 文件中存在 CSV 文件
有什么解决办法吗?
问题是您正在尝试使用一些 mysql 函数 LOAD DATA LOCAL INFILE
,它不知道您的类路径。它正在尝试查看您的文件系统,但这样的路径不存在。即使您提供类似 yourapp.jar!liquibase/changelogs/2021/prices.csv
的内容,它也无法读取该文件。您需要将 prices.csv
从应用程序中拉出到文件系统并将 mysql 函数指向该位置。
或者,如果有帮助,您可以使用 liquibase 的 loadData。