在 gradle 项目中使用 Flyway 时如何启用 MySQL 连接字符串“ENABLE_LOCAL_INFILE”?

Posted

技术标签:

【中文标题】在 gradle 项目中使用 Flyway 时如何启用 MySQL 连接字符串“ENABLE_LOCAL_INFILE”?【英文标题】:How to enable the MySQL connection string "ENABLE_LOCAL_INFILE" when using Flyway in a gradle project? 【发布时间】:2021-09-06 10:18:15 【问题描述】:

我的 Java gradle 项目中有几个 .txt 文件,我使用这些文件在 sql 脚本中使用 mysql 语句 LOAD DATA LOCAL INFILE 填充数据库。

我的PC上运行着一台MySQL服务器,其主机名为127.0.0.1,端口为3306,数据库名称为test,所以在gradle项目的build.gradle文件中,我通过以下方式配置flyway:

flyway 
    url = 'jdbc:mysql://127.0.0.1:3306/test'
    user = 'root'
    password = '111111'

.sql 文件的示例是

LOAD DATA LOCAL INFILE 'data/categories.txt' INTO TABLE category
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n';

但是当使用gradle flywayMigrate -i 运行迁移时,我得到了以下错误: Loading local data is disabled; this must be enabled on both the client and server sides

我想我已经在 server 端启用了它,如下所示,这是一个MySQL Command Line Client 截图。 希望我做得对。

这一步之后还是报错,所以我想我也需要在client端启用它,也就是在Java gradle项目中,对吗? 基于https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html,我应该设置ENABLE_LOCAL_INFILE = 1

但是怎么做呢?我应该在哪里添加这个ENABLE_LOCAL_INFILE = 1 连接字符串?

希望有人可以帮助我。 提前致谢!

【问题讨论】:

【参考方案1】:

使用 JDBC 连接字符串属性allowLoadLocalInfile=true

见https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-connp-props-security.html#cj-conn-prop_allowLoadLocalInfile

【讨论】:

以上是关于在 gradle 项目中使用 Flyway 时如何启用 MySQL 连接字符串“ENABLE_LOCAL_INFILE”?的主要内容,如果未能解决你的问题,请参考以下文章

使用 gradle 和 flyway 插件创建 MySQL 模式

Spring boot、JOOQ和Flyway如何一起使用?

如何一起使用Spring启动,JOOQ和Flyway?

使用 Jenkins 和 Gradle 运行 Flyway 迁移 - 无法解析位置类路径:db/migration

使用flyway时在启动时清除数据库

如何将参数添加到 flyway build.gradle 文件?