Spring Boot + Spring Data on GAE with CloudSql - 数据库连接

Ray*_*uan 5 google-app-engine spring spring-data google-cloud-sql spring-boot

我无法将 Spring Boot + Spring Data 应用程序部署到 Google App Engine 并使该应用程序连接到 Google CloudSql (MySQL) 数据库。

GAE 应用程序和 CloudSql 实例位于同一项目中。

我可以运行整个应用程序并从本地主机连接到 CloudSql,没有任何问题。

没有数据库连接的 Spring Boot 在 GAE 上可以正常工作,不会出现错误。添加 Spring Data 会引发“com.mysql.cj.jdbc.exceptions.CommunicationsException:通信链接失败”错误。

在 pom.xml 中我包含了:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>
<dependency>
    <groupId>com.google.cloud.sql</groupId>
    <artifactId>mysql-socket-factory</artifactId>
    <version>1.0.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

另外,我尝试仅使用 mysql 依赖项:

<dependency>
     <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

在我的研究中,我没有发现任何关于 Spring Boot + Spring Data + GAE + CloudSql 的好的例子或相关问题。

application.properties 文件中连接到 CloudSql DB 的正确设置是什么?我尝试了以下方法,但都抛出了各种错误:

spring.jpa.hibernate.ddl-auto:none

# tried with GoogleDriver and without:
# spring.datasource.driver-class-name=com.mysql.jdbc.GoogleDriver

# urls configs attempted:
# spring.datasource.url=jdbc:mysql://google/**db-name**?cloudSqlInstance=***instance-name***b&socketFactory=com.google.cloud.sql.mysql.SocketFactory
# spring.datasource.url=jdbc:mysql://***instance-name***/**db-name**?user=root
# spring.datasource.url=jdbc:mysql://localhost:3306/**db-name**
spring.datasource.url=jdbc:mysql://127.0.0.1:3306:3306/**db-name**
# spring.datasource.url=jdbc:mysql://***mysql ip address***:3306/**db-name**

spring.datasource.username=***user***
spring.datasource.password=***password***
Run Code Online (Sandbox Code Playgroud)

小智 3

我遇到了同样的问题,Spring boot application.properties 中的以下属性对我有用。

database=mysql
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://google/{db-schema}?socketFactory=com.google.cloud.sql.mysql.SocketFactory&cloudSqlInstance={Cloud-sql-Instance-Name}

spring.datasource.username=root
spring.datasource.password=password
Run Code Online (Sandbox Code Playgroud)