【问题标题】:google-cloud-run quarkus google-cloud-sql谷歌云运行 quarkus 谷歌云 sql
【发布时间】:2020-10-03 02:39:23
【问题描述】:

我在云运行下部署了一个原生 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部署的。

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

【问题讨论】:

    标签: google-cloud-sql quarkus google-cloud-run quarkus-panache


    【解决方案1】:

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

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

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

    【讨论】:

    • 你的意思是“错误 [org.hib.eng.jdb.spi.SqlExceptionHelper] (main) Driver does not support the provided URL: jdbc:postgres://[user]:[ pwd]@/[db-name]?unix_sock=/cloudsql/[db-connection-name]" ...
    • 我想我可以用这个github.com/jtama-op/quarkus/tree/… 修复它...但我不知道如何集成到我的项目中
    • 我不是 Quarkus 专家。尝试联系 github 帐户持有人并寻求指导
    • Quarkus jdbc 还不支持套接字连接。我必须安装云 sql 代理来解决这个问题。参照qiita.com/koduki/items/fa60e87e1d8bb28c2be4
    【解决方案2】:

    我没有使用unix_socket,而是简单地使用quarkus.datasource.jdbc.url=jdbc:mysql:///DB-NAME?ipTypes=PRIVATE&amp;cloudSqlInstance=PROJECT-NAME:REGION:demo&amp;socketFactory=com.google.cloud.sql.mysql.SocketFactory(以及quarkus.datasource.username=quarkus.datasource.password=,一如既往)。

    p>

    ?ipTypes=PRIVATE&amp; 是 GCP 中的 to connect to a Cloud SQL with only a private instead of a public IP;如果您想连接到公共 IP,请省略它,例如从您在家或工作的开发人员机器上。

    最棘手的部分不是这个,而是to set up all the required pre-requisites on GCP,这个连接可以通过在 AppEngine Standard 上运行的 Quarkus 服务工作。

    Quarkus Issue #9985 用于记录此内容。

    【讨论】:

      猜你喜欢
      • 2022-12-23
      • 2019-01-29
      • 2020-09-10
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 2018-10-11
      相关资源
      最近更新 更多