如何在 Google Cloud Run 和 Google Cloud SQL 之间建立连接?

问题描述 投票:0回答:1

我拥有的:基于 eclipse-temurin:11-jre 的 Docker 容器中带有 Hikari Pool (Grails 4) 的 Java11 Spring Boot 应用程序(嵌入 tomcat 9)。 我需要什么:我的应用程序需要连接到 mysql 数据库,我想使用 google cloud sql mysql 数据库。 我的问题是:当部署到 Google Cloud Run 时,我的应用程序无法建立与数据库的连接。

通过为我的云运行修订版定义 Cloud SQL 连接,它会神奇地向我的 docker 容器添加一个 unix 套接字,这一基本假设让我感到不安,因为这是我唯一不理解的事情。

有人知道要尝试什么或做什么吗?也许解释一下如何创建套接字连接? 我的下一次也是最后一次尝试是将 cloud-sql-proxy 加上 iam 凭据添加到我的 docker 容器中,但这似乎违背了文档推荐的所有内容。一定有我监督的事情。

我按照指南(https://cloud.google.com/sql/docs/mysql/connect-run)并将我能拿到的所有东西都涂成红色。 我从文档中了解到,Google Cloud Run 以某种方式将 unixsocket

/cloudsql/PROJECT-ID:REGION:INSTANCE-ID
注入到我的容器中,以提供与 cloudsql 数据库的连接,我可以使用
jdbc:mysql:///DB_NAME?unixSocketPath=/cloudsql/PROJECT-ID:REGION:INSTANCE-ID
访问该套接字。 我还尝试定义
socketFactory=com.google.cloud.sql.mysql.SocketFactory
加上添加
mysql-socket-factory-connector-j-8
依赖项并设置
cloudSqlInstance=PROJECT-ID:REGION:INSTANCE-ID
ipTypes=PUBLIC

spring-boot google-cloud-platform jdbc google-cloud-sql unix-socket
1个回答
0
投票

数据源属性似乎不适用于 grails 4 连接池配置。我必须按照正确的顺序将所有必要的信息(例如套接字、cloudSqlInstance 和 unixSocketPath)添加到 jdbc-url,然后一切就可以正常工作了。

jdbc:mysql:///${DBNAME}?unixSocketPath=/cloudsql/${CLOUDSQL_INSTANCE}&cloudSqlInstance=${CLOUDSQL_INSTANCE}&socketFactory=com.google.cloud.sql.mysql.SocketFactory

帮我解决了这个问题。首先使用 socketFactory 或 cloudSqlInstance 参数不起作用。不知道为什么,但这解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.