1

我在云运行下部署了一个原生 quarkus 应用程序。此应用程序需要连接到云 sql postgresql 数据库。在配置面板的云运行中,我创建了一个 Cloud SQL 连接(db-instance-name eq.cloud sql)和一些变量作为 DB_USER、DB_PASSWORD、DB_NAME 在 Quarkus 上,我定义如下属性:

quarkus.datasource.jdbc.url=jdbc:postgresql:///${DBNAME}:5432
quarkus.datasource.driver=org.postgresql.Driver
quarkus.datasource.username=${DB_USER}
quarkus.datasource.password=${DB_PASSWORD}

我的 pom.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

不得不说cloud run是通过cloud build来部署的。

你能帮我解决这个问题吗...谢谢

4

2 回答 2

1

您需要使用unix_socket如下所示的文件

postgres://user:password@/databasename?unix_sock=/cloudsql/projectshortcod:us-central1:pg-instance-name

您可能需要将其放在库的 URL 字段中,但请确保该库支持 unix_socket 数据库。

于 2020-06-13T13:57:22.397 回答
0

我得到了这个工作(对于 MySQL 而不是 Postgres;但应该是相似的)没有使用 a unix_socket,而只是使用 a quarkus.datasource.jdbc.url=jdbc:mysql:///DB-NAME?ipTypes=PRIVATE&cloudSqlInstance=PROJECT-NAME:REGION:demo&socketFactory=com.google.cloud.sql.mysql.SocketFactory(和 an quarkus.datasource.username=and quarkus.datasource.password=,一如既往)。

即从 GCP 内部仅使用私有 IP 而?ipTypes=PRIVATE&不是公共 IP 连接到 Cloud SQL ;如果您想连接到公共 IP,例如从您在家或工作的开发人员机器上,请忽略它。

最棘手的部分不是这个,而是在 GCP 上设置所有必需的先决条件,以使此连接能够在 AppEngine Standard 上运行的 Quarkus 服务中工作。

Quarkus Issue #9985用于记录这一点。

于 2021-01-18T02:19:26.367 回答