将Spring Boot应用程序连接到Google Cloud中的MySQL数据库

时间:2018-05-02 11:15:44

标签: mysql maven spring-boot google-cloud-sql app-engine-flexible

我尝试使用带有MySQL数据库的jdbc将Spring Boot Maven应用程序部署到具有第2代数据库的灵活Google App Engine项目。 当app和db都在本地运行时,所有函数都按预期运行(spring-boot:run& XAMPP)。 当app在本地运行且db在Google CloudSQL上时,所有功能仍然正常运行。 但是,当两个实体都部署到Google Cloud时,我的应用会出现“连接链接失败”状态。在尝试访问数据库时。 该应用程序正在部署正常并提供硬编码响应。 app和db位于同一个Google Cloud Project中,CloudSQL存储桶设置为允许所有项目文件访问。 但是我也尝试将它们分成单独的项目并在db的列表中授权应用程序的项目。没变。 它的行为与我尝试从未经授权的IP地址访问数据库的行为完全相同。

我已按照指示建议将元素添加到app.yaml文件中。

<mat-horizontal-stepper [linear]="isLinear" #stepper="matHorizontalStepper">
  <mat-step [stepControl]="firstFormGroup">
    <form [formGroup]="firstFormGroup">
      <ng-template matStepLabel>Fill out your name</ng-template>
      <mat-form-field>
        <input matInput placeholder="Last name, First name" formControlName="firstCtrl" required>
      </mat-form-field>
      <div>
        <button mat-button matStepperNext>Next</button>
      </div>
    </form>
  </mat-step>
  <mat-step [stepControl]="secondFormGroup">
    <form [formGroup]="secondFormGroup">
      <ng-template matStepLabel>Fill out your address</ng-template>
      <mat-form-field>
        <input matInput placeholder="Address" formControlName="secondCtrl" required>
      </mat-form-field>
      <div>
        <button mat-button matStepperPrevious>Back</button>
        <button mat-button matStepperNext>Next</button>
      </div>
    </form>
  </mat-step>
  <mat-step>
    <ng-template matStepLabel>Done</ng-template>
    You are now done.
    <div>
      <button mat-button matStepperPrevious>Back</button>
      <button mat-button (click)="stepper.reset()">Reset</button>
    </div>
  </mat-step>
</mat-horizontal-stepper>

我已按照指示建议将元素添加到application.properties文件中。

runtime: java
env: flex

runtime_config:  # Optional
jdk: openjdk8

handlers:
   - url: /.*
   script: this field is required, but ignored

# I've tried implementing env_variables and beta setting
# both separately and in tandem.
env_variables:
   MYSQL_DSN: mysql:unix_socket=/cloudsql/jdbc:mysql://12.345.67.890;dbname=exam
   MYSQL_USER: username
   MYSQL_PASSWORD: password

beta_settings:
   cloud_sql_instances: mytestproject1-123456:europe-west1:mydb  

manual_scaling:
   instances: 1

我按照指示建议将元素添加到POM.xml文件中。

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://12.345.67.890/exam
spring.datasource.username=username
spring.datasource.password=password

# I've also tried this url formulation:
#spring.datasource.url=jdbc:mysql://google/exam?cloudSqlInstance=mytestproject1-123456:europe-west1:mydb&amp;socketFactory=com.google.cloud.sql.mysql.SocketFactory&amp;user=username&amp;password=password&amp;useSSL=false

再一次,这一切都可以在本地部署中正常运行,而Cloud MySQL存储桶正在将其数据提供给本地部署的应用程序。 我的问题是,如何在部署到Google App Engine时将Spring Boot应用程序连接到Cloud MySQL实例?

1 个答案:

答案 0 :(得分:0)

您可能有兴趣尝试新的Spring Cloud GCP integration for Cloud SQL MySQL。 它会自动为您选择JDBC URL。您应该能够以比目前更少的配置运行应用程序。