将 Spring Boot 应用连接到 Cloud SQL

Cloud SQL 是一项全代管式数据库服务,让您能够在 Google Cloud 上轻松设置、维护、管理和控制关系型数据库。您可以将 Cloud SQL 与 Cloud SQL for MySQL 或 Cloud SQL for PostgreSQL 搭配使用。

在此 Codelab 中,您将学习如何设置 Cloud SQL for MySQL 实例,然后如何更新 Spring Boot 应用来将 Cloud SQL 实例用作其后端存储。适用于 Google Cloud SQL 的 Spring Boot 入门版提供自动配置的 DataSource,让您能够轻松地利用 Cloud SQL,同时只需对代码进行极少的更改。本 Codelab 使用 Spring Petclinic 源代码

前提条件

  • 熟悉 Java 编程语言和工具
  • 了解标准的 Linux 文本编辑器,例如 Vim、Emacs 和 nano

您将执行的操作

  • 在 Spring Boot 应用中使用 Cloud SQL。

所需条件

自定进度的环境设置

  1. 登录 Cloud Console,然后创建一个新项目或重复使用现有项目。(如果您还没有 Gmail 或 G Suite 帐号,则必须创建一个。)

请记住项目 ID,它在所有 Google Cloud 项目中都是唯一名称(很抱歉,上述名称已被占用,您无法使用!)。它稍后将在此 Codelab 中被称为 PROJECT_ID

  1. 接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Google Cloud 资源。

在此 Codelab 中运行仅花费几美元,但是如果您决定使用更多资源或继续让它们运行,费用可能更高。

Google Cloud 的新用户有资格获享 $300 免费试用

激活 Cloud Shell

  1. 在 Cloud Console 中,点击激活 Cloud Shell

如果您以前从未启动过 Cloud Shell,您将看到一个中间屏幕(在折叠下面),上面描述了它是什么。如果是这种情况,请点击继续(您将永远不会再看到它)。一次性屏幕如下所示:

预配和连接到 Cloud Shell 只需花几分钟时间。

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证。只需使用一个浏览器或 Chromebook 即可完成本 Codelab 中的大部分(甚至全部)工作。

在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设置为您的项目 ID:

  1. 在 Cloud Shell 中运行以下命令以确认您已通过身份验证:
gcloud auth list

命令输出

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

命令输出

[core]
project = <PROJECT_ID>

如果不是上述结果,您可以使用以下命令进行设置:

gcloud config set project <PROJECT_ID>

命令输出

Updated property [core/project].
  1. 启动 Cloud Shell 后,您可以使用命令行创建新的 Cloud SQL 实例:
$ gcloud sql instances create my-instance

此操作完成后,您的实例即准备就绪可供使用。

  1. 现在创建一个将用于 Petclinic 应用的数据库:
$ gcloud sql databases create petclinic --instance my-instance

您还可以通过 Cloud Console 访问和配置实例。

  1. 运行以下命令来获取格式为 project-id:zone-id:instance-id 的实例连接名称。稍后您将使用它来配置 Spring Boot 应用。
$ gcloud sql instances describe my-instance |grep connectionName
  1. 现在,您将在本地克隆和测试 Petclinic 应用。
$ git clone https://github.com/spring-projects/spring-petclinic
$ cd spring-petclinic
$ ./mvnw spring-boot:run
  1. 点击 Cloud Shell 中的网页预览,然后选择在端口 8080 上预览

您应该在浏览器中看到如下所示的 Petclinic 首页:

  1. 操作和添加数据。应用使用内存中 HyperSQL 数据库。您现在将从 HyperSQL 切换到使用 Cloud SQL 作为数据库。

更新 Maven pom.xml 文件

更新 pom.xml 文件,如下所示。入门版提供了一个自动配置的 DataSource 对象,用于连接到 Cloud SQL 数据库。您可以使用 Vim、nano 或 Emacs 来编辑文件。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
    ...
    <!-- Add Spring Cloud GCP Dependency BOM -->
    <dependencyManagement>
        <dependencies>
          <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-gcp-dependencies</artifactId>
          <version>1.0.0.RC1</version>
          <type>pom</type>
          <scope>import</scope>
          </dependency>
      </dependencies>
    </dependencyManagement>
    <dependencies>
      ...
      <!-- Add CloudSQL Starter for MySQL -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
      </dependency>
      ...
    </dependencies>
    <repositories>
      <!-- Use Spring Milestone Repository -->
      <repository>
        <id>repository.spring.milestone</id>
        <name>Spring Milestones Repository</name>
        <url>http://repo.spring.io/milestone</url>
      </repository>
    </repositories>
</project>

更新 application-mysql.properties

  1. src/main/resources/application-mysql.properties 的内容替换为以下属性。您需要设置上一步中的实例连接名称。

src/main/resources/application-mysql.properties

database=mysql

# Delete the rest of the original content of the file and replace with the following:
spring.cloud.gcp.sql.database-name=petclinic
spring.cloud.gcp.sql.instance-connection-name=YOUR_CLOUD_SQL_INSTANCE_CONNECTION_NAME

# Initialize the database since the newly created Cloud SQL database has no tables. The following flag is for Spring Boot 2.
spring.datasource.initialization-mode=always
  1. 最后,通过将 mysql 添加到 application.properties' spring.profiles.active 属性,在 Spring Boot 应用中启用 Cloud SQL for MySQL 配置文件:

src/main/resources/application.properties

# Keep the content of the file the same
...

# In the last line, add mysql to the spring.profiles.active property
spring.profiles.active=mysql
  1. 您可以使用 Spring Boot 插件正常启动 Spring Boot 应用:
$ ./mvnw -DskipTests spring-boot:run
  1. 启动该应用后,点击 Cloud Shell 工具栏中的网页预览 ,然后选择在端口 8080 上预览

您应该会在浏览器中看到 Spring Petclinic 首页,如下所示:

  1. 添加 pet 所有者条目。

可选:验证 Cloud SQL 是否已经保留数据

您可以验证输入的数据是否已保存到 Cloud SQL,如下所示。当系统提示您输入密码时,按 Enter 键(Macintosh 上的 return 键)。

$ gcloud sql connect my-instance -u root
Whitelisting your IP for incoming connection for 5 minutes...done.
Enter password: <Press Enter, there is no password by default>
...
mysql> use petclinic;
mysql> select * from owners;
  

可选:删除您的 Cloud SQL 实例

停止应用后,您可以使用以下命令来删除 Cloud SQL 实例:

$ gcloud sql instances delete my-instance 

您已了解如何在 Spring Boot 应用中连接到 Cloud SQL!

了解详情