Облачный SQL Postgres Не найден подходящий драйвер для jdbc: postgres: // google / - PullRequest
0 голосов
/ 27 марта 2019

Заранее спасибо!

Я новичок в gcp и пытаюсь использовать Cloud SQL Postgres.У меня есть база данных, которая создается, и я хочу создать / обновить / удалить таблицы в ней, используя java или scala.

Я пытаюсь использовать postgres-socket-factory из 'com.google.cloud.sqlпакет.Но при создании соединения я получаю сообщение об ошибке:

"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

Как устранить эту ошибку?

С уважением,

1 Ответ

0 голосов
/ 27 марта 2019

Большинство библиотек в GCP используют стратегию Application Default Credentials (ADC) для обработки учетных данных. README для этого проекта упоминает, что эта библиотека делает то же самое. Cloud SQL JDBC Socket Factory использует эти учетные данные для аутентификации соединений с вашей базой данных.

Самый быстрый способ - использовать gcloud auth application-default login, который по умолчанию установит ваши личные учетные данные. Однако самый безопасный и безопасный способ - создать для приложения учетную запись службы , присвоить ему роль IAM «Cloud SQL Client» и использовать переменную среды GOOGLE_APPLICATION_CREDENTIALS для передачи местоположения учетной записи службы. ключ к библиотеке.

...