我正在尝试将我的App Engine应用程序(在Java Spring Boot中)与Cloud SQL数据库连接。部署正常工作,应用启动,但在连接到云 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) 我更新应用程序属性
# 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
。
这听起来与github/cloud-sql-jdbc-socket-factory #148中发生的事情非常相似。问题是依赖冲突,过时的番石榴版本会导致问题。你能检查一下你指定的番石榴版本吗?
此外,无需担心使用&useSSL=false
- JDBC SF 始终使用 SSL,因此这是有意为之。