將 Spring Boot 應用程式連結至 Cloud SQL

1. 事前準備

Cloud SQL 是一項全代管資料庫服務,能讓您輕鬆設定、維護、管理 Google Cloud 中的關聯式資料庫。您可以搭配 MySQL 適用的 Cloud SQL 或 PostgreSQL 適用的 Cloud SQL 使用 Cloud SQL。

在本程式碼研究室中,您將瞭解如何設定 MySQL 適用的 Cloud SQL 執行個體,然後更新 Spring Boot 應用程式,將 Cloud SQL 執行個體做為後端儲存空間。適用於 Google Cloud SQL 的 Spring Boot Starter 提供自動設定的 DataSource,讓您輕鬆運用 Cloud SQL,且程式碼變動極少。本程式碼研究室會使用 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 控制台會自動產生專屬字串,通常您不需要在意該字串為何。在大多數程式碼研究室中,您需要參照專案 ID (通常標示為 PROJECT_ID)。如果您不喜歡產生的 ID,可以產生另一個隨機 ID。你也可以嘗試使用自己的名稱,看看是否可用。完成這個步驟後就無法變更,且專案期間會維持不變。
  • 請注意,有些 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三種值,請參閱說明文件
  1. 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成這個程式碼研究室的費用不高,甚至可能完全免費。如要關閉資源,避免在本教學課程結束後繼續產生費用,請刪除您建立的資源或專案。Google Cloud 新使用者可參加 $300 美元的免費試用計畫。

啟用 Cloud Shell

  1. 在 Cloud 控制台,點選「啟用 Cloud Shell」 圖示 853e55310c205094.png

55efc1aaa7a4d3ad.png

如果您是首次啟動 Cloud Shell,系統會顯示中繼畫面,說明這個指令列環境。如果出現中繼畫面,請按一下「繼續」

9c92662c6a846a5c.png

佈建並連至 Cloud Shell 預計只需要幾分鐘。

9f0e51b578fecce5.png

這部虛擬機器已載入所有必要的開發工具,並提供永久的 5 GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。本程式碼研究室幾乎所有工作都可在瀏覽器上完成。

連至 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. 設定 MySQL 適用的 Cloud SQL 執行個體

  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 中按一下「Web Preview」(網頁預覽) 1a94d5bd10bfc072.png,然後選取「Preview on port 8080」(透過以下通訊埠預覽:8080)

3aca52f76c6c22a3.png

瀏覽器中應會顯示 Petclinic 首頁,如下所示:

34e0d4f1e1765560.png

  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. 最後,在 Spring Boot 應用程式中啟用 MySQL 適用的 Cloud SQL 設定檔,方法是在 application.properties' spring.profiles.active 屬性中加入 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

6. 在 Cloud Shell 中執行應用程式

  1. 您可以使用 Spring Boot 外掛程式正常啟動 Spring Boot 應用程式:
$ ./mvnw -DskipTests spring-boot:run
  1. 應用程式啟動後,請按一下 Cloud Shell 工具列中的「網頁預覽」1a94d5bd10bfc072.png,然後選取「透過以下通訊埠預覽:8080」

3aca52f76c6c22a3.png

您應該會在瀏覽器中再次看到 Spring Petclinic 首頁,如下所示:

34e0d4f1e1765560.png

  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!

瞭解詳情