在 App Engine 上部署了 Hibernate 的 Spring Boot 应用无法连接到云 SQL

SpringBoot App with Hibernate deployed on App Engine failed connecting to Cloud SQL

我有一个部署在 App Engine 上的 SpringBoot 应用程序,我的数据库是 MySQL8。 对于我的本地测试,我可以使用 public IP 连接到云数据库并且连接工作正常。

但是在 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 连接时我错过了什么。 请协助。

当您使用 APP ENgine(或 Cloud Functions 或 Cloud 运行)中的 Cloud SQL 功能连接您的 Cloud SQL 数据库时,该服务会打开一个套接字来连接数据库。您不必使用 public IP,而是打开的套接字。

它类似于套接字模式下的云 SQL 代理。您有包含 Java 示例 here

的文档