我在云运行下部署了一个原生的夸克应用程序。此应用程序需要连接到云 sql postgresql 数据库。 在配置面板的云运行中,我创建了一个云 SQL 连接(数据库实例名称等式云 sql(和一些变量作为DB_USER、DB_PASSWORD DB_NAME 在夸库斯上,我定义属性如下:
quarkus.datasource.jdbc.url=jdbc:postgresql:///${DBNAME}:5432
quarkus.datasource.driver=org.postgresql.Driver
quarkus.datasource.username=${DB_USER}
quarkus.datasource.password=${DB_PASSWORD}
我的绒球.xml
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm-panache</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-postgresql</artifactId>
</dependency>
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>postgres-socket-factory</artifactId>
<version>1.0.16</version>
</dependency>
启动云运行时,发生异常:
WARN [io.agr.pool] (Agroal_18109070341) Datasource '<default>': Connection to :5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections
我不得不说云运行是由云构建部署的。
你能帮我解决这个问题吗... 谢谢
您需要使用unix_socket
文件如下所示
postgres://user:password@/databasename?unix_sock=/cloudsql/projectshortcod:us-central1:pg-instance-name
您可能需要将其放在库的 URL 字段中,但请确保库支持unix_socket数据库。
我在不使用unix_socket
的情况下得到了这个工作(用于MySQL而不是Postgres;但应该是类似的(,而只是使用quarkus.datasource.jdbc.url=jdbc:mysql:///DB-NAME?ipTypes=PRIVATE&cloudSqlInstance=PROJECT-NAME:REGION:demo&socketFactory=com.google.cloud.sql.mysql.SocketFactory
(以及一如既往的quarkus.datasource.username=
和quarkus.datasource.password=
(。
?ipTypes=PRIVATE&
是从GCP中仅使用私有IP而不是公共IP连接到Cloud SQL;如果您想连接到公共IP,例如从家中或工作场所的开发人员计算机,请省略该IP。
最棘手的部分不是这个,而是在 GCP 上设置所有必需的先决条件,以便此连接从 AppEngine Standard 上运行的 Quarkus 服务工作。
Quarkus 问题 #9985 是关于记录这一点的。