【问题标题】:Google Cloud SQL JDBC Socket Facrory UnknownHostException: googleGoogle Cloud SQL JDBC Socket Facrory UnknownHostException:google
【发布时间】:2019-12-14 18:33:30
【问题描述】:

我想使用 JDBC Socket Factory 从运行在 Kubernetes 容器中的 Spring 4 Maven 应用程序连接到 Google Cloud SQL 数据库。

pom.xml 有:

<dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>8.4-702.jdbc4</version>
</dependency>
<dependency>
    <groupId>com.google.cloud.sql</groupId>
    <artifactId>postgres-socket-factory</artifactId>
    <version>1.0.14</version>
</dependency>

在applicationContext.xml中:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
    <property name="driverClassName" value="org.postgresql.Driver"></property>  
    <property name="url" value="jdbc:postgresql://google/mydb?cloudSqlInstance=myinstance&amp;socketFactory=com.google.cloud.sql.postgres.SocketFactory;"></property>  
    <property name="username" value="postgres"></property>  
    <property name="password" value="passwd"></property>  
</bean> 

我有带有服务帐户详细信息的 GOOGLE_APPLICATION_CREDENTIALS 环境变量来访问云 sql。

但我得到以下异常:

Caused by: org.hibernate.exception.JDBCConnectionException: Could not open connection
        at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:131)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
        at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)
        at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1395)
        at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:59)
        ... 100 common frames omitted
Caused by: org.postgresql.util.PSQLException: The connection attempt failed.
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:150)
        at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
        at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
        at org.postgresql.Driver.makeConnection(Driver.java:393)
        at java.sql.DriverManager.getConnection(DriverManager.java:664)
        at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:154)
        at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297)
        ... 105 common frames omitted
Caused by: java.net.UnknownHostException: google
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at java.net.Socket.connect(Socket.java:538)
        at java.net.Socket.<init>(Socket.java:434)
        at java.net.Socket.<init>(Socket.java:211)
        at org.postgresql.core.PGStream.<init>(PGStream.java:62)
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:76) 

这里可能缺少什么?

【问题讨论】:

  • 你启动云sql代理了吗?
  • 我不想使用云sql代理,而是想使用JDBC Socket Factory

标签: java spring google-cloud-platform google-kubernetes-engine google-cloud-sql


【解决方案1】:

使用 Kubernetes 和 Google Cloud SQL 时,您必须使用 private IP address or the Cloud SQL Proxy Docker image

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 2019-03-26
  • 2021-03-27
  • 2019-12-15
  • 2019-08-17
  • 2020-01-23
相关资源
最近更新 更多