【发布时间】:2021-09-15 20:36:54
【问题描述】:
我正在阅读official documentation 并停留在以下步骤
文档中使用的应用程序支持诸如MYSQL_HOST和MYSQL_USER等环境变量,但我的程序是Java,不支持它们。
相反,我在 java 代码中使用以下连接字符串来连接数据库:
return new DefaultConfiguration().set(DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC",
"root",
"111111"))
.set(SQLDialect.MYSQL);
那么我应该如何更改连接字符串?因为现在连接失败如下图
Jul 05, 2021 12:31:35 AM org.jooq.tools.JooqLogger error
SEVERE: Error in file: /app/build/tmp/generateJooq/config.xml. Error : Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
对于host,我应该将其更改为localhost吗?我在 mysql 命令行中运行 select user(); 得到以下结果
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
这是否意味着主机是localhost?
但是,当我运行show variables; 时,hostname 的值是1f1632505b1f,那么为什么会有两个主机名呢?
对于端口,我检查了 MySQL 映像,它暴露了 3306,所以我认为这部分我不需要更改,对吗?
对于数据库名称,我创建了一个名为test 的数据库,所以我认为这部分应该没问题。用户名和密码相同。
【问题讨论】:
-
一个好的做法是从您引用的environment variables 构造连接字符串,而不是在应用程序中硬编码某些内容。 Docker 中的
localhost一般表示“这个容器”;像Networking in Compose 这样的文档描述了如何在容器之间建立连接。 -
@DavidMaze 感谢您的建议。你是对的,我已经改为使用环境变量。
标签: java mysql docker jdbc jooq