Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法获取与云SQL API通信的凭据,远程主机在握手期间关闭了连接_Java_Google Cloud Datastore - Fatal编程技术网

Java 无法获取与云SQL API通信的凭据,远程主机在握手期间关闭了连接

Java 无法获取与云SQL API通信的凭据,远程主机在握手期间关闭了连接,java,google-cloud-datastore,Java,Google Cloud Datastore,我正在尝试使用下面的代码连接到谷歌云上的mysql。这是我第一次尝试使用mysql处理google云sql public static void main(String[] args) throws IOException, SQLException { String instanceConnectionName = "####";//providing correct connection name String databaseName = "shan"; String usernam

我正在尝试使用下面的代码连接到谷歌云上的mysql。这是我第一次尝试使用mysql处理google云sql

 public static void main(String[] args) throws IOException, SQLException {
String instanceConnectionName = "####";//providing correct connection name

String databaseName = "shan";

String username = "root";

String password = "####";//providing correct password


String jdbcUrl = String.format(
    "jdbc:mysql://google/%s?cloudSqlInstance=%s&"
        + "socketFactory=com.google.cloud.sql.mysql.SocketFactory",
    databaseName,
    instanceConnectionName);

Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
  try (Statement statement = connection.createStatement()) {
  ResultSet resultSet = statement.executeQuery("SHOW TABLES");
  while (resultSet.next()) {
    System.out.println(resultSet.getString(1));
  }
}
}

当我尝试执行此代码时,出现以下错误:

    Feb 25, 2018 4:45:41 PM com.google.cloud.sql.mysql.SocketFactory connect
INFO: Connecting to Cloud SQL instance [stockinventary-1517746804001:asia-east1:shan].
Feb 25, 2018 4:45:41 PM com.google.cloud.sql.core.SslSocketFactory getInstance
INFO: First Cloud SQL connection, generating RSA key pair.
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.Util.getInstance(Util.java:408)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2271)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2024)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:779)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.sf.si.poc.ListTables.main(ListTables.java:48)
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:549)
    at com.google.cloud.sql.core.SslSocketFactory.getInstance(SslSocketFactory.java:140)
    at com.google.cloud.sql.mysql.SocketFactory.connect(SocketFactory.java:48)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2192)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2225)
    ... 13 more
Caused by: java.io.IOException: Error reading credential file from location C:\Users\dell\AppData\Roaming\gcloud\application_default_credentials.json: Remote host closed connection during handshake
    at com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getCredentialUsingWellKnownFile(DefaultCredentialProvider.java:251)
    at com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getDefaultCredentialUnsynchronized(DefaultCredentialProvider.java:117)
    at com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getDefaultCredential(DefaultCredentialProvider.java:91)
    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:547)
    ... 18 more
2018年2月25日下午4:45:41 com.google.cloud.sql.mysql.SocketFactory connect
信息:连接到云SQL实例[StockInventory-1517746804001:asia-east1:shan]。
2018年2月25日下午4:45:41 com.google.cloud.sql.core.SslSocketFactory getInstance
信息:第一个云SQL连接,生成RSA密钥对。
线程“main”com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException中出现异常:无法创建到数据库服务器的连接。
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:425)
位于com.mysql.jdbc.Util.getInstance(Util.java:408)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2271)
位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2024)
位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:779)
位于com.mysql.jdbc.JDBC4Connection(JDBC4Connection.java:47)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:425)
位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
位于com.sf.si.poc.ListTables.main(ListTables.java:48)
原因:java.lang.RuntimeException:无法获取与云SQL API通信的凭据
位于com.google.cloud.sql.core.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:549)
位于com.google.cloud.sql.core.SslSocketFactory.getInstance(SslSocketFactory.java:140)
位于com.google.cloud.sql.mysql.SocketFactory.connect(SocketFactory.java:48)
在com.mysql.jdbc.MysqlIO上(MysqlIO.java:300)
位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2192)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2225)
... 还有13个
原因:java.io.IOException:从位置C:\Users\dell\AppData\Roaming\gcloud\application\u default\u credentials.json读取凭据文件时出错:握手期间远程主机关闭连接
在com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getCredentialUsingWellKnownFile(DefaultCredentialProvider.java:251)
位于com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getDefaultCredentialUnsynchronized(DefaultCredentialProvider.java:117)
在com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getDefaultCredential(DefaultCredentialProvider.java:91)
位于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:547)
... 还有18个
我还运行了gcloud sql实例,并在以下位置生成了json文件:C:\Users\dell\AppData\Roaming\gcloud\application\u default\u credentials.json
您能指导我找出这个问题的实际原因和纠正方法吗?

我通过自己的分析得出了答案,如下所示: 我添加了带有json文件(在运行gcloud auth应用程序默认登录时创建)的GOOGLE_APPLICATION_CREDENTIALS环境变量作为值

这解决了我的问题


谢谢。

我通过自己的分析得出了答案,这是: 我添加了带有json文件(在运行gcloud auth应用程序默认登录时创建)的GOOGLE_APPLICATION_CREDENTIALS环境变量作为值

这解决了我的问题


谢谢。

对于我来说,刚刚运行
gcloud auth应用程序默认登录就解决了问题。@RoyShilkrot非常感谢,这是我解决问题的方法。对于我来说,刚刚运行
gcloud auth应用程序默认登录就解决了问题。@RoyShilkrot非常感谢,这是我解决问题的方法。