使用CloudSql的GAE上的Spring Boot + Spring数据 - 数据库连接

时间:2017-05-06 02:39:21

标签: spring google-app-engine spring-boot spring-data google-cloud-sql

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

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

我能够运行整个应用并从localhost连接到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>

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

<dependency>
     <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>

在我的研究中,我没有找到任何关于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***

2 个答案:

答案 0 :(得分:1)

我有同样的问题,在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

答案 1 :(得分:0)

您必须遵循以下步骤:

1)通过转到以下链接启用Cloud SQL API:

https://console.cloud.google.com/flows/enableapi?apiid=sqladmin&redirect=https:%2F%2Fconsole.cloud.google.com

2)从https://console.cloud.google.com/apis/credentials/serviceaccountkey

下载服务帐户JSON密钥文件

3)使用密钥GOOGLE_APPLICATION_CREDENTIALS将此文件路径设置为环境变量。

 on Windows OS open command prompt and run command: set GOOGLE_APPLICATION_CREDENTIALS=[File path] 

 on Linux OS on console run command : export GOOGLE_APPLICATION_CREDENTIALS=[File path]

4)在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>
  <dependency>
      <groupId>com.google.api-client</groupId>
      <artifactId>google-api-client</artifactId>
      <version>1.23.0</version>
  </dependency>

`

5)在application.properties文件中使用以下属性:

spring.datasource.url=jdbc:mysql://google/[Database-Name]?cloudSqlInstance=[instance-Connection-Name]&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false spring.datasource.username=[Database-Username] spring.datasource.password=[Database-Password]

希望这会有所帮助。