將 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!

瞭解詳情