为什么App Engine无法通过Spring Boot应用程序连接到Cloud SQL?

时间:2019-08-23 11:54:39

标签: spring google-app-engine jdbc google-cloud-platform google-cloud-sql

我正在尝试将我的App Engine应用程序(在Java Spring Boot中)与Cloud SQL数据库连接。部署可以正常进行,并且可以启动应用,但是阻止了与Cloud SQL的连接:

main] c.g.cloud.sql.core.CoreSocketFactory     : First Cloud SQL connection, generating RSA key pair.
main] c.g.cloud.sql.core.CoreSocketFactory     : Connecting to Cloud SQL instance [test-api:europe-west1:test-db] via SSL socket.

// Nothing happens after that !

我做什么?

1)我在数据库中使用用户名和密码(例如postgres和postgres)创建了一个用户。

2)我将此依赖项添加到我的项目中

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-gcp-starter</artifactId>
    <version>1.1.2.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-gcp-starter-sql-postgresql</artifactId>
    <version>1.1.2.RELEASE</version>
</dependency>

3)我使用以下方式更新application.properties

# Gcp configuration
spring.cloud.gcp.sql.database-name=test
spring.cloud.gcp.sql.instance-connection-name=test-api:europe-west1:test-db

#Jdbc connection
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.url=jdbc:postgresql://google/test?cloudSqlInstance=test-api:europe-west1:test-db&socketFactory=com.google.cloud.sql.postgres.SocketFactory&useSSL=false&user=postgres&password=postgres

出了什么问题?

问题是Connecting to Cloud SQL instance登录后什么也没发生。 (请参见前面)

在启动日志中,我可以看到以下信息:

main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.19]
main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 11980 ms
main] o.s.c.g.a.s.GcpCloudSqlAutoConfiguration : Default POSTGRESQL JdbcUrl provider. Connecting to jdbc:postgresql://google/test?socketFactory=com.google.cloud.sql.postgres.SocketFactory&socketFactoryArg=test-api:europe-west1:test-db&useSSL=false with driver org.postgresql.Driver
main] o.s.c.g.a.s.GcpCloudSqlAutoConfiguration : spring.datasource.url is specified. Not using generated Cloud SQL configuration
main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
main] c.g.cloud.sql.core.CoreSocketFactory     : First Cloud SQL connection, generating RSA key pair.
main] c.g.cloud.sql.core.CoreSocketFactory     : Connecting to Cloud SQL instance [test-api:europe-west1:test-db] via SSL socket.

另一个奇怪的是,我指定了&useSSL=false,但是应用程序正在根据日志连接via SSL socket

1 个答案:

答案 0 :(得分:0)

这听起来与github/cloud-sql-jdbc-socket-factory #148中发生的事情非常相似。问题是依赖冲突,其中过时的番石榴版本引起了问题。您可以检查指定的番石榴版本吗?

此外,无需担心使用&useSSL=false-JDBC SF始终使用SSL,因此这是有意的。