【问题标题】:SpringBoot App with Hibernate deployed on App Engine failed connecting to Cloud SQL部署在 App Engine 上的带有 Hibernate 的 Spring Boot App 无法连接到 Cloud SQL
【发布时间】:2021-12-23 05:30:00
【问题描述】:

我在 App Engine 上部署了一个 SpringBoot 应用程序,我的数据库是 MySQL 8。 对于我的本地测试,我可以使用公共 IP 连接到 Cloud DB,并且连接工作正常。

但是当这个应用程序部署在 App Engine 上时,我得到了错误:

2021-11-09 01:44:50 default[1]  2021-11-09 01:44:50.874  INFO 10 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.25.Final
2021-11-09 01:44:51 default[1]  2021-11-09 01:44:51.092  INFO 10 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2021-11-09 01:46:58 default[1]  2021-11-09 01:46:58.343  WARN 10 --- [           main] o.h.e.j.e.i.JdbcEnvironmentInitiator     : HHH000342: Could not obtain connection to query metadata
2021-11-09 01:46:58 default[1]
2021-11-09 01:46:58 default[1]  com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
2021-11-09 01:46:58 default[1]
2021-11-09 01:46:58 default[1]  The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
2021-11-09 01:46:58 default[1]      at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]
2021-11-09 01:46:58 default[1]      at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Caused by: java.net.ConnectException: Connection timed out (Connection timed out)

我已按照文档中提到的步骤进行操作: https://cloud.google.com/sql/docs/mysql/connect-app-engine-standard

app.yaml

runtime: java11
instance_class: F2
entrypoint: java -noverify -jar strategy-0.0.1-SNAPSHOT.war

application.properties

#spring.datasource.url=jdbc:mysql://35.345.11.132:3306/fin_strat
spring.datasource.url=jdbc:mysql://localhost:3306/fin_strat
spring.datasource.username=<database-user-name>
spring.datasource.password=<database-password>
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

我不确定从 App Engine 连接时遗漏了什么。 请帮忙。

【问题讨论】:

    标签: google-app-engine google-cloud-platform google-cloud-sql


    【解决方案1】:

    当您使用 App Engine(或 Cloud Functions 或 Cloud Run)中的 Cloud SQL 功能连接您的 Cloud SQL 数据库时,该服务会打开一个套接字来连接数据库。您不必使用公共 IP,而是使用已打开的套接字。

    类似于套接字模式下的 Cloud SQL 代理。你有一个 Java 示例的文档here

    【讨论】:

    • 我必须根据示例代码更新 getConnection 实现,当这个连接对象被传递给休眠会话对象时,我可以连接到 Cloud SQL。
    猜你喜欢
    • 2020-02-19
    • 2020-06-26
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 2017-08-28
    • 2020-02-02
    • 2014-04-08
    相关资源
    最近更新 更多