【问题标题】:Liquibase SQL Changeset Cannot Load CSV File : FileNotFoundExceptionLiquibase SQL 变更集无法加载 CSV 文件:FileNotFoundException
【发布时间】:2021-11-16 08:09:20
【问题描述】:

对 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(没有这样的文件 或目录)2021-09-22T20:52:18.581085123Z at java.io.FileInputStream.open0(本机方法) 2021-09-22T20:52:18.581087214Z 在 java.io.FileInputStream.open(FileInputStream.java:195) 2021-09-22T20:52:18.581089768Z 在 java.io.FileInputStream.(FileInputStream.java:138) 2021-09-22T20:52:18.581092029Z 在 java.io.FileInputStream.(FileInputStream.java:93) 2021-09-22T20:52:18.581094150Z 在 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

我已检查 CSV 文件是否存在于 WAR 文件中

任何想法如何解决这个问题?

【问题讨论】:

    标签: war liquibase liquibase-sql


    【解决方案1】:

    问题是你正在尝试使用一些不知道你的类路径的mysql函数LOAD DATA LOCAL INFILE。它正在尝试查看您的文件系统,但这样的路径不存在。即使您提供yourapp.jar!liquibase/changelogs/2021/prices.csv 之类的内容,它也无法读取该文件。您需要将prices.csv 从您的应用程序中拉出到文件系统,并将 mysql 函数指向该位置。
    或者,如果有帮助,您可以使用 liquibase 的 loadData

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 2021-08-10
      • 1970-01-01
      • 2023-01-17
      • 2023-04-07
      相关资源
      最近更新 更多