Cloud SQL Postgres 找不到适合 jdbc:postgres://google/ 的驱动程序



提前感谢!

我是gcp的新手,正在尝试使用Cloud SQL Postgres。我有一个创建的数据库,并希望使用 java 或 scala 在其中创建/更新/删除表。

我正在尝试使用来自"com.google.cloud.sql"包的postgres-socket-factory。但是在创建连接时,我收到一个错误

"java.sql.SQLException: No suitable driver found for jdbc:postgres://google/"

这是我的代码

def getConnection(url:String) : Connection = {
  Class.forName("org.postgresql.Driver")
  import java.sql.DriverManager
  DriverManager.getConnection(url)
}

Java/Scala客户端从Cloud SQL访问数据库的方法是什么?

是的,在按照评论中的说明并更改 url 后,它有效但失败

    Caused by: java.lang.RuntimeException: Unable to obtain credentials to communicate with the Cloud SQL API
    at com.google.cloud.sql.core.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:600)
    at com.google.cloud.sql.core.SslSocketFactory.getInstance(SslSocketFactory.java:147)
    at com.google.cloud.sql.postgres.SocketFactory.createSocket(SocketFactory.java:91)
    at org.postgresql.core.PGStream.<init>(PGStream.java:62)
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:91)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
    at org.postgresql.Driver.makeConnection(Driver.java:454)
    at org.postgresql.Driver.connect(Driver.java:256)
    ... 6 more
Caused by: java.io.IOException: The Application Default Credentials are not available. They are available if running on Google App Engine, Google Compute Engine, or Google Cloud Shell. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
    at com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getDefaultCredential(DefaultCredentialProvider.java:98)
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:213)
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:191)
    at com.google.cloud.sql.core.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:598)
    ... 15 more

如何解决此故障?

问候

GCP 上的大多数库都使用应用程序默认凭据 (ADC( 策略来处理凭据。该项目的自述文件也提到了这个库。云 SQL JDBC 套接字工厂使用这些凭据对数据库的连接进行身份验证。

最快的方法是使用 gcloud auth application-default login ,这会将您的个人凭据设置为默认值。但是,最安全、最可靠的方法是为应用程序创建一个服务账户,向其授予"云 SQL 客户端"IAM 角色,并使用GOOGLE_APPLICATION_CREDENTIALS环境变量将服务帐户密钥的位置传递给库。

相关内容

  • 没有找到相关文章

最新更新