【问题标题】:Cannot connect to Azure MySQL DB from JAVA Azure Function无法从 JAVA Azure 函数连接到 Azure MySQL DB
【发布时间】:2018-11-12 09:09:25
【问题描述】:

我正在开发一个简单的 JAVA 时间触发 Azure 函数。

我正在尝试连接到 Azure MySQL 实例,但我不断收到此错误:

[Information] com.mysql.cj.jdbc.exceptions.CommunicationsException: 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.

这里是源代码:

String url="jdbc:mysql://XXXX.mysql.database.azure.com:3306/DBNAME?useSSL=true&requireSSL=false";
connect = DriverManager.getConnection(url, "user@DBNAME", "passwd"); 
statement = connect.createStatement(); 
resultSet statement.executeQuery("select * from table1");

我正在使用以下库:

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>

注意事项:

  • 该程序在我的本地机器上运行良好(即,将我的 IP 地址添加到 MySQL 防火墙后,我可以从我的机器访问数据库);

  • 我已经尝试过不同的 mysql 库:没有任何变化;

  • 另一个用 NodeJS 实现的 Azure 函数能够访问数据库;

  • 我尝试将“附加出站 IP 地址”功能添加到 MySQL 防火墙:没有任何变化。

有什么想法吗?

提前谢谢你。

【问题讨论】:

  • 您是否尝试过同一连接器包的不同版本?看起来它与 azure mysql stackoverflow.com/questions/44620692/… stackoverflow.com/questions/53095542/… 有此类连接问题的历史
  • 谢谢。我已经尝试过不同的软件包版本,但错误仍然存​​在。关键是相同的 JAVA 代码在我的本地机器上运行良好(即,我可以连接到远程 Azure DB)。这似乎与特定的 Azure/网络配置有关。
  • 更新:我开发了一个简单的 C# Azure 函数,效果很好。这似乎是一个与基于 JAVA 的 Azure Function env 严格相关的问题。
  • 你找到解决这个问题的方法了吗?
  • 我联系了 MS 支持,但不幸的是他们没有提供任何解决方案。他们告诉我 JAVA 仍处于预览阶段,所以他们关闭了票。这个问题很奇怪。我尝试了许多不同的配置/jdbc 库,但没有任何改变。奇怪的是,当我在本地机器上运行相同的代码时,我可以访问 Azure MySQL DB。

标签: java azure azure-functions azure-mysql-database


【解决方案1】:

5.1.31 MySQL-connector-java 版本为我工作。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

Connecting MySQL Azure with Java

【讨论】:

  • 它对我不起作用:(我尝试重新创建应用程序但没有任何变化。我的数据库具有 SSL 状态:启用。可能与 SSL 连接有关?
  • 我的网址:jdbc:mysql://xxxxxxx:3306/{mydb}?serverTimezone={zone}&trustServerCertificate=true&encrypt=true&hostNameInCertificate=*.database.windows.net
  • 感谢您分享您的连接字符串。这是我所做的:我尝试了您的建议并获得以下错误jdbc:mysql://xxx.mysql.database.azure.com:3306/xxx?serverTimezone=UTC&amp;trustServerCertificate=true&amp;encrypt=true&amp;hostNameInCertificate=*.database.windows.net Error: java.sql.SQLException: SSL connection is required. Please specify SSL options and retry.。
  • 以前的问题可能是由于 SSL 设置,所以我以这种方式更改了您的字符串:jdbc:mysql://xxx.mysql.database.azure.com:3306/xxx?useSSL=true&amp;serverTimezone=UTC&amp;trustServerCertificate=true&amp;encrypt=true&amp;hostNameInCertificate=*.database.windows.net Error: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
  • 可以分享java项目吗?当然,我不是要你提供整个代码 ;-) 而是它的“简化”版本,我可以在其中看到用于数据库连接的 maven 设置 anche 代码?非常感谢。
猜你喜欢
  • 2023-03-12
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
  • 2019-03-30
  • 2018-01-05
  • 1970-01-01
相关资源
最近更新 更多