将 Spring Boot 应用连接到 Cloud SQL

1. 准备工作

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。

所需条件

2. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用 PROJECT_ID 标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。

激活 Cloud Shell

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

55efc1aaa7a4d3ad.png

如果这是您第一次启动 Cloud Shell,系统会显示一个中间屏幕,说明它是什么。如果您看到中间屏幕,请点击继续

9c92662c6a846a5c

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

9f0e51b578fecce5

这个虚拟机装有所需的所有开发工具。它提供了一个持久的 5 GB 主目录,并在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 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`
  1. 在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目:
gcloud config list project

命令输出

[core]
project = <PROJECT_ID>

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

gcloud config set project <PROJECT_ID>

命令输出

Updated property [core/project].

3. 设置 Cloud SQL for MySQL 实例

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

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

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

您还可以通过 Cloud 控制台访问和配置实例。

  1. 运行以下命令来获取格式为 project-id:zone-id:instance-id 的实例连接名称。稍后您将使用它来配置 Spring Boot 应用。
$ gcloud sql instances describe my-instance | grep connectionName

4. 在本地克隆和测试 Petclinic 应用

  1. 现在,您将在本地克隆 Petclinic 应用。
$ git clone https://github.com/spring-projects/spring-petclinic

$ cd spring-petclinic
  1. 请确保设置正确的 Java 版本,并在本地运行 Petclinic 应用。
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

$ ./mvnw spring-boot:run
  1. 点击 Cloud Shell 中的网页预览1a94d5bd10bfc072,然后选择在端口 8080 上预览

3aca52f76c6c22a3

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

34e0d4f1e1765560

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

5. 在 Petclinic 中使用 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>com.google.cloud</groupId>
          <artifactId>spring-cloud-gcp-dependencies</artifactId>
          <version>4.1.4</version>
          <type>pom</type>
          <scope>import</scope>
          </dependency>
      </dependencies>
    </dependencyManagement>
    <dependencies>
      ...
      <!-- Add CloudSQL Starter for MySQL -->
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
      </dependency>
      ...
    </dependencies>
</project>

更新 application-mysql.properties

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

src/main/resources/application-mysql.properties

database=mysql

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.5+.
spring.sql.init.mode=always  

  1. 最后,通过将 mysql 添加到 application.properties,在 Spring Boot 应用中启用 Cloud SQL for MySQL 配置文件spring.profiles.active 属性:

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

6. 在 Cloud Shell 中运行应用

  1. 您可以使用 Spring Boot 插件正常启动 Spring Boot 应用:
$ ./mvnw -DskipTests spring-boot:run
  1. 在应用启动后,点击 Cloud Shell 工具栏中的网页预览1a94d5bd10bfc072,然后选择在端口 8080 上预览

3aca52f76c6c22a3

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

34e0d4f1e1765560

  1. 添加宠物所有者条目。

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

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

$ 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

7. 恭喜

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

了解详情