Google Cloud SQL JDBC Socket Facrory UnknownHostException: google

8/7/2019

I want to connect to Google Cloud SQL database using JDBC Socket Factory from a Spring 4 Maven application running in Kubernetes container.

The pom.xml has:

<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>

In 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&socketFactory=com.google.cloud.sql.postgres.SocketFactory;"></property>  
    <property name="username" value="postgres"></property>  
    <property name="password" value="passwd"></property>  
</bean> 

I have GOOGLE_APPLICATION_CREDENTIALS environment variable with service account details to access cloud sql.

But I'm getting following exception:

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) 

What could be missing here?

-- user5155835
google-cloud-platform
google-cloud-sql
google-kubernetes-engine
java
spring

1 Answer

8/7/2019

When using Kubernetes and Google Cloud SQL you must either use a private IP address or the Cloud SQL Proxy Docker image

-- Andres S
Source: StackOverflow