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

Java Cloud SQL Postgres未找到适合jdbc的驱动程序:postgres://google/,java,postgresql,scala,google-cloud-platform,google-cloud-sql,Java,Postgresql,Scala,Google Cloud Platform,Google Cloud Sql,提前谢谢 我是gcp新手,正在尝试使用云SQL Postgres。 我创建了一个数据库,希望使用java或scala在其中创建/更新/删除表 我正在尝试使用“com.google.cloud.sql”包中的postgres套接字工厂。 但在创建连接时,我遇到了一个错误 "java.sql.SQLException: No suitable driver found for jdbc:postgres://google/" 这是我的密码 def getConnection(url:String)

提前谢谢

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

我正在尝试使用“com.google.cloud.sql”包中的postgres套接字工厂。 但在创建连接时,我遇到了一个错误

"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客户端从云SQL访问db的方法是什么

是,在按照注释中的说明并更改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
原因:java.lang.RuntimeException:无法获取与云SQL API通信的凭据
位于com.google.cloud.sql.core.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:600)
位于com.google.cloud.sql.core.SslSocketFactory.getInstance(SslSocketFactory.java:147)
位于com.google.cloud.sql.postgres.SocketFactory.createSocket(SocketFactory.java:91)
位于org.postgresql.core.PGStream(PGStream.java:62)
位于org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(connectionfactorympl.java:91)
位于org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)
位于org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
位于org.postgresql.jdbc.PgConnection.(PgConnection.java:195)
位于org.postgresql.Driver.makeConnection(Driver.java:454)
位于org.postgresql.Driver.connect(Driver.java:256)
... 还有6个
原因:java.io.IOException:应用程序默认凭据不可用。如果在谷歌应用程序引擎、谷歌计算引擎或谷歌云外壳上运行,则可以使用它们。否则,必须定义指向定义凭据的文件的环境变量GOOGLE\u APPLICATION\u CREDENTIALS。看见https://developers.google.com/accounts/docs/application-default-credentials 了解更多信息。
在com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getDefaultCredential(DefaultCredentialProvider.java:98)
位于com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:213)
位于com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:191)
位于com.google.cloud.sql.core.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:598)
... 还有15个
如何解决这一失败


在这方面,

GCP上的大多数库使用(ADC)策略来处理凭据。这个项目的主题提到这个库也是如此。云SQL JDBC套接字工厂使用这些凭据根据数据库对连接进行身份验证


最快的方法是使用
gcloud auth application default login
,它会将您的个人凭据设置为默认值。但是,最安全和最安全的方法是为应用程序创建一个应用程序,授予它“Cloud SQL Client”IAM角色,并使用
GOOGLE\u application\u CREDENTIALS
环境变量将服务帐户密钥的位置传递给库。

它应该是
jdbc:postgresql://
,是否启用了云SQL API?