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

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

程式碼研究室簡介

subject上次更新時間:4月 13, 2023
account_circle作者:Google 員工

1. 事前準備

Cloud SQL 是全代管資料庫服務,可協助您輕鬆設定、維護及管理 Google Cloud 中的關聯資料庫。您可以將 Cloud SQL 與 MySQL 適用的 Cloud SQL 或 PostgreSQL 適用的 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 未使用的字元字串。你隨時可以更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,而且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為 PROJECT_ID)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。或者,您也可以自行嘗試,看看是否支援。在這個步驟後,這個名稱即無法變更,而且在專案期間內仍會保持有效。
  • 資訊中的第三個值是專案編號,部分 API 會使用這個編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行本程式碼研究室不會產生任何費用 (如果有的話)。如要關閉資源,以免產生本教學課程結束後產生的費用,您可以刪除自己建立的資源或刪除專案。新使用者符合 $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 應用程式時使用這組 ID。
$ gcloud sql instances describe my-instance | grep connectionName

4. 在本機複製並測試寵物診所應用程式

  1. 您現在會在本機複製寵物診所應用程式。
$ 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.png,然後選取「透過以下通訊埠預覽:8080」

3aca52f76c6c22a3.png

你應該會看到瀏覽器中顯示的 Petclinic 首頁,如下所示:

34e0d4f1e1765560.png

  1. 四處看看並新增資料。應用程式使用記憶體內的 HyperSQL 資料庫。您現在可以從 HyperSQL 改用 Cloud SQL 做為資料庫。

5. 在寵物診所中使用 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 應用程式中啟用 MySQL 適用的 Cloud SQL 設定檔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.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!

瞭解詳情