Google App Engine 中的 Spring Boot 应用程序无法连接到 Cloud SQL

2024-03-27

我不确定我还缺少什么,但我的应用程序一开始就失败了:

Message    : The connection attempt failed.

    at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:60) ~[flyway-core-5.2.4.jar!/:na]
    at org.flywaydb.core.internal.database.DatabaseFactory.createDatabase(DatabaseFactory.java:72) ~[flyway-core-5.2.4.jar!/:na]
    at org.flywaydb.core.Flyway.execute(Flyway.java:1670) ~[flyway-core-5.2.4.jar!/:na]
    at org.flywaydb.core.Flyway.migrate(Flyway.java:1356) ~[flyway-core-5.2.4.jar!/:na]
    at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:65) ~[spring-boot-autoconfigure-2.1.7.RELEASE.jar!/:2.1.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1837) ~[spring-beans-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1774) ~[spring-beans-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
    ... 26 common frames omitted
Caused by: org.postgresql.util.PSQLException: The connection attempt failed.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:292) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.Driver.makeConnection(Driver.java:458) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.Driver.connect(Driver.java:260) ~[postgresql-42.2.6.jar!/:42.2.6]
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:136) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:541) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.2.0.jar!/:na]
    at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:56) ~[flyway-core-5.2.4.jar!/:na]
    ... 32 common frames omitted
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
    at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) ~[na:na]
    at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) ~[na:na]
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) ~[na:na]
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) ~[na:na]
    at java.base/java.net.Socket.connect(Socket.java:591) ~[na:na]
    at org.postgresql.core.PGStream.<init>(PGStream.java:75) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:91) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192) ~[postgresql-42.2.6.jar!/:42.2.6]
    ... 44 common frames omitted    

My app.yaml is

runtime: java11
manual_scaling:
  instances: 1
beta_settings:
  cloud_sql_instances: recruiters-wtf:europe-west2:recruiters-wtf=tcp:5432

而我的application.properties包含:

spring.datasource.url=jdbc:postgresql://172.17.0.1:5432/${DB_NAME:recruiters_wtf}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}

我还缺少什么?同一应用程序的 Kubernetes 部署正在成功使用该数据库。

根据 kurtisvg 的回答,我将连接字符串更改为:

spring.datasource.url=jdbc:postgresql://google/recruiters_wtf?cloudSqlInstance=recruiters-wtf:europe-west2:recruiters-wtf=tcp:5432&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=${DB_USER}&password=${DB_PASS}

我已经安装了 postgres-socket-factory 。将错误更改为:

Message    : The connection attempt failed.

    at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:60) ~[flyway-core-5.2.4.jar!/:na]
    at org.flywaydb.core.internal.database.DatabaseFactory.createDatabase(DatabaseFactory.java:72) ~[flyway-core-5.2.4.jar!/:na]
    at org.flywaydb.core.Flyway.execute(Flyway.java:1670) ~[flyway-core-5.2.4.jar!/:na]
    at org.flywaydb.core.Flyway.migrate(Flyway.java:1356) ~[flyway-core-5.2.4.jar!/:na]
    at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:65) ~[spring-boot-autoconfigure-2.1.7.RELEASE.jar!/:2.1.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1837) ~[spring-beans-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1774) ~[spring-beans-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
    ... 26 common frames omitted
Caused by: org.postgresql.util.PSQLException: The connection attempt failed.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:292) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.Driver.makeConnection(Driver.java:458) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.Driver.connect(Driver.java:260) ~[postgresql-42.2.6.jar!/:42.2.6]
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:136) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:541) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-3.2.0.jar!/:na]
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.2.0.jar!/:na]
    at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:56) ~[flyway-core-5.2.4.jar!/:na]
    ... 32 common frames omitted
Caused by: java.io.IOException: No such file or directory
    at jnr.unixsocket.UnixSocketChannel.doConnect(UnixSocketChannel.java:127) ~[jnr-unixsocket-0.23.jar!/:na]
    at jnr.unixsocket.UnixSocketChannel.connect(UnixSocketChannel.java:136) ~[jnr-unixsocket-0.23.jar!/:na]
    at jnr.unixsocket.UnixSocketChannel.open(UnixSocketChannel.java:68) ~[jnr-unixsocket-0.23.jar!/:na]
    at com.google.cloud.sql.core.CoreSocketFactory.connect(CoreSocketFactory.java:180) ~[jdbc-socket-factory-core-1.0.15.jar!/:na]
    at com.google.cloud.sql.postgres.SocketFactory.createSocket(SocketFactory.java:71) ~[postgres-socket-factory-1.0.15.jar!/:na]
    at org.postgresql.core.PGStream.<init>(PGStream.java:67) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:91) ~[postgresql-42.2.6.jar!/:42.2.6]
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192) ~[postgresql-42.2.6.jar!/:42.2.6]
    ... 44 common frames omitted

据记录here https://cloud.google.com/sql/docs/postgres/connect-app-engine#configuring:

App Engine 标准环境不支持连接到云 使用 TCP 的 SQL 实例。您的代码不应尝试访问 使用 IP 地址(例如 127.0.0.1 或 172.17.0.1)的实例,除非 您已配置无服务器 VPC 访问。

首先,您需要删除beta_settings进入你的app.yaml文件自:

  • 它适用于 App EngineFlexible(并且实际上指示平台启动运行 CloudSQL 代理的 sidecar 容器,而 Socket Factory for JDBC 不需要该容器)
  • 你使用的语法=tcp:5432实际上会指示 CloudSQL 代理通过 TCP 端口进行连接。

所以你的 Base JDBC url 应该是这样的jdbc:postgresql://google/recruiters_wtf

您的完整数据源网址将是(请注意已删除=tcp:5432 part):

jdbc:postgresql://google/recruiters_wtf?cloudSqlInstance=recruiters-wtf:europe-west2:recruiters-wtf&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=${DB_USER}&password=${DB_PASS}

最后,请注意,正如我上面提供的链接中提到的:

PostgreSQL 标准要求 Unix 套接字具有 套接字路径中的.s.PGSQL.5432 后缀。一些图书馆应用这个 自动后缀,但其他要求您指定套接字 路径如下:/cloudsql/INSTANCE_CONNECTION_NAME/.s.PGSQL.5432。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google App Engine 中的 Spring Boot 应用程序无法连接到 Cloud SQL 的相关文章

随机推荐

  • 导入某种语言字母表中的所有字母

    是否可以将某种语言 土耳其语 波兰语 俄语等 的字母表中所有可能的字母 小写 大写等 导入为 python 列表 有特定的模块可以做到这一点吗 你的问题与一个更大的问题有关 某些语言的字母表如何存储在计算机中 它们如何表示 以及 最终 如何
  • 如何仅在服务器调用 PHP 脚本时运行它

    我有一个 PHP 脚本 只有在服务器本身调用它时才会运行 像这样 form submit 运行 AJAX 请求来 POST 表单数据 我不想开发一个哈希解码和编码系统来证明请求是否被允许 是否可以简单地检查 服务器是否运行脚本 或客户端是否
  • 特质不就是简单的组合吗?

    我正在阅读一篇有关 PHP 5 4 0 中的新功能的文章 最值得期待的之一是Traits http php net traits 阅读这些内容Traits 看看它们的全部内容 对我来说它们只是编译器辅助的复制粘贴 一种语言提供了使用组合的方
  • D3.js V4 和 Angular 不会发生节点转换

    我在用角度打字稿 with D3 js V 4 12我特别使用整齐的径向树 https bl ocks org mbostock 4063550用于代表产品 初始步骤 随着ng cli 我安装了npm install save d3并创建了
  • SharedKeyCredential 不是构造函数。 Azure存储反应应用程序

    我正在尝试使用以下代码将 blockblob 上传到反应应用程序中的 Azure 存储 但是 我收到以下错误 类型错误 SharedKeyCredential 不是构造函数 有任何想法吗 azure 电子邮件受保护 cdn cgi l em
  • MVC 捆绑包和 IIS 虚拟目录(URL 重写)

    我在 IIS 服务器虚拟目录上托管多个应用程序 并使用 URL 重写来简化它们 所有图像和其他资产都是这样手动编写的 path to my content 有正确的输出 path to my content 但捆绑路径如 client js
  • 金钱图能很好地流动吗?

    sql 数据类型 Money 是否映射到 C float 不 它映射到decimal 如果该列允许 null 则它映射到Nullable
  • 将 ASP.NET 应用程序迁移到 IIS7 时出现注册表访问错误

    我正在运行 Windows 7 64 位和 iis7 我正在尝试在 XP 上设置一个以前在 iis6 中的 Web 应用程序 它给了我下面的错误 我已将网络服务用户添加到性能监视器用户组中 但无济于事 对注册表项 Global 的访问是 否
  • 如何通过Java Validator消息传递参数?

    目前 我有类似的东西 NotNull message err required Size min 1 message err required private String firstName In my messages properti
  • bean 验证获取验证组

    是否可以获取调用验证方法的验证器中的组 我有多个组 创建 更新 删除 它们大多数会导致对一个 bean 进行类似的验证 我不想提供多个几乎相同的验证器 并创建实用程序函数来外部化相同的验证代码 我更愿意有一个验证器来处理有关调用验证的组的验
  • graphviz 绘图太宽

    我正在做练习 在 jupyter 笔记本中使用 graphviz 创建决策树 然而 决策树过于宽泛 这是代码 from sklearn tree import export graphviz export graphviz tree out
  • 保存 .php 文件并保存包含内容(可能)

    设置 我有一个标准 php 文件 index php 其中包含两个包含内容 一个用于页眉 header php 一个用于页脚 footer php index php 文件如下所示 索引 php h2 Hello h2 p class ed
  • 检查 Windows C/C++ 中的文件夹/文件是否隐藏/系统

    我正在使用 C STL Boost 编写一个跨平台应用程序 我意识到它们没有提供一种方法来检查文件夹或文件是否隐藏或者是 Windows 中的系统文件 在 Windows 的 C C 中执行此操作的最简单方法是什么 理想情况下 我有一个带有
  • 从 python Fabric 执行远程 bash 命令时“转义”$

    所以我尝试通过 python Fabric 脚本自动设置 arch linux 实例 如下所示 from fabric api import run sudo def server setup communityrepo run echo
  • mingw 应用程序中的清单被忽略

    我有一个老式的 Windows GDI 应用程序 用 C 编写 正在使用 Mingw 工具链进行编译 我的一些用户一直在抱怨 Windows Vista 和 Windows 7 的虚拟存储 其中写入应用程序不应访问的目录的文件会被抽走并存储
  • 可以在 UIWebView 中使用 iframe 吗?

    我想在我的应用程序中添加一个类似 facebook 的按钮 在developer facebook com 中我对此无能为力 是否可以在 UIWebView 中使用 facebook 创建的 iframe 之类的按钮 它认为如果可能的话我可
  • Android Studio 模拟器不断冻结、崩溃并且根本没有响应

    我是一名 Android 开发新手 最近遇到了一些问题 我不知道这是我的硬件问题还是 Android Studio 的问题 但模拟器一直冻结或没有响应 前 2 天 Android Studio 运行良好 但是 之后它无法运行我的应用程序 我
  • 使用python 3.7创建pipenv虚拟环境时出错

    我的操作系统是 ubuntu 20 04 默认的 python 是 3 8 2 我正在尝试使用 Pipenv 和 python 3 7 创建一个虚拟环境 当我运行时出现以下错误pipenv install python 3 7 Creati
  • C++ 将时间字符串转换为纪元的秒数

    我有一个具有以下格式的字符串 2010 11 04T23 23 01Z Z 表示时间为 UTC 我宁愿将其存储为纪元时间 以便于比较 推荐的方法是什么 目前 经过快速搜索 最简单的算法是 1
  • Google App Engine 中的 Spring Boot 应用程序无法连接到 Cloud SQL

    我不确定我还缺少什么 但我的应用程序一开始就失败了 Message The connection attempt failed at org flywaydb core internal jdbc JdbcUtils openConnect