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。
所需条件
- Google Cloud 项目
- 一个浏览器,例如 Google Chrome 或 Firefox
2. 设置和要求
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。
- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用
PROJECT_ID
标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。 - 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。
激活 Cloud Shell
- 在 Cloud Console 中,点击激活 Cloud Shell。
如果这是您第一次启动 Cloud Shell,系统会显示一个中间屏幕,说明它是什么。如果您看到中间屏幕,请点击继续。
预配和连接到 Cloud Shell 只需花几分钟时间。
这个虚拟机装有所需的所有开发工具。它提供了一个持久的 5 GB 主目录,并在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的大部分(即使不是全部)工作都可以通过浏览器完成。
在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设为您的项目 ID。
- 在 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`
- 在 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 实例
- 启动 Cloud Shell 后,您可以使用命令行创建新的 Cloud SQL 实例:
$ gcloud sql instances create my-instance
此操作完成后,您的实例即准备就绪可供使用。
- 现在创建一个将用于 Petclinic 应用的数据库:
$ gcloud sql databases create petclinic --instance my-instance
您还可以通过 Cloud 控制台访问和配置实例。
- 运行以下命令来获取格式为
project-id:zone-id:instance-id
的实例连接名称。稍后您将使用它来配置 Spring Boot 应用。
$ gcloud sql instances describe my-instance | grep connectionName
4. 在本地克隆和测试 Petclinic 应用
- 现在,您将在本地克隆 Petclinic 应用。
$ git clone https://github.com/spring-projects/spring-petclinic $ cd spring-petclinic
- 请确保设置正确的 Java 版本,并在本地运行 Petclinic 应用。
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/ $ ./mvnw spring-boot:run
- 点击 Cloud Shell 中的网页预览,然后选择在端口 8080 上预览。
您应该在浏览器中看到如下所示的 Petclinic 首页:
- 操作和添加数据。应用使用内存中 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
- 将
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
- 最后,通过将
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 中运行应用
- 您可以使用 Spring Boot 插件正常启动 Spring Boot 应用:
$ ./mvnw -DskipTests spring-boot:run
- 在应用启动后,点击 Cloud Shell 工具栏中的网页预览,然后选择在端口 8080 上预览。
您应该会在浏览器中看到 Spring Petclinic 首页,如下所示:
- 添加宠物所有者条目。
可选:验证 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!