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

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

程式碼研究室簡介

subject上次更新時間:4月 22, 2020
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 的啟動入門提供自動設定的 DataSource,讓您可以輕鬆地使用 Cloud SQL,而且不用修改程式碼。本程式碼研究室使用 Spring Petclinic 原始碼

事前準備

  • 熟悉 Java 程式語言和工具
  • 熟悉標準 Linux 文字編輯器,例如 Vim、Emacs 和 Nano

要執行的步驟

  • 在 Spring Boot 應用程式中使用 Cloud SQL。

軟硬體需求

2. 設定和相關規定

自行調整環境設定

  1. 登入 Cloud Console,建立新專案或重複使用現有專案。(如果您還沒有 Gmail 或 G Suite 帳戶,請先建立帳戶)。

提醒您,專案編號是所有 Google Cloud 專案的不重複名稱 (使用上述名稱後就無法使用,敬請見諒!)此程式碼研究室稍後將稱為 PROJECT_ID

  1. 接著,您必須在 Cloud Console 中啟用計費功能,才能使用 Google Cloud 資源。

完成這個程式碼研究室的成本應該不會超過新臺幣 $300 元,但如果您決定用到更多資源,或讓資源繼續運作,則可能需花費更多費用。

Google Cloud 新使用者可享有 $300 美元的免費試用期

啟動 Cloud Shell

  1. 在 Cloud Console 中按一下 [啟用 Cloud Shell]

如果您之前從未啟動 Cloud Shell,系統會提供一個中繼畫面 (需捲動位置),說明其是什麼。如果是這種情況,請按一下繼續 (這樣就永遠不會再看到這個畫面)。這個一次性畫面的外觀如下:

佈建和連線至 Cloud Shell 只需要幾分鐘的時間。

這部虛擬機器已載入所有您需要的開發工具。這項服務提供永久性的 5GB 主目錄,可在 Google Cloud 中執行,大幅提升網路效能和驗證效能。透過這個程式碼研究室的大部分作業,只要用瀏覽器或 Chromebook 就能完成。

連線至 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`
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 Console 存取及設定執行個體。

  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
$ ./mvnw spring-boot:run
  1. 在 Cloud Shell 中按一下 [Web Preview] (網頁預覽) ,然後選取 [透過以下埠預覽:8080]

瀏覽器應該會如下所示:

  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>org.springframework.cloud</groupId>
         
<artifactId>spring-cloud-gcp-dependencies</artifactId>
         
<version>1.0.0.RC1</version>
         
<type>pom</type>
         
<scope>import</scope>
         
</dependency>
     
</dependencies>
   
</dependencyManagement>
   
<dependencies>
      ...
     
<!-- Add CloudSQL Starter for MySQL -->
     
<dependency>
       
<groupId>org.springframework.cloud</groupId>
       
<artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
     
</dependency>
      ...
   
</dependencies>
   
<repositories>
     
<!-- Use Spring Milestone Repository -->
     
<repository>
       
<id>repository.spring.milestone</id>
       
<name>Spring Milestones Repository</name>
       
<url>http://repo.spring.io/milestone</url>
     
</repository>
   
</repositories>
</project>

更新 application-mysql.properties

  1. src/main/resources/application-mysql.properties 的內容替換為下列屬性。您必須設定前一個步驟的執行個體連線名稱。

src/main/resources/application-mysql.properties

database=mysql

# Delete the rest of the original content of the file and replace with the following:
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.
spring
.datasource.initialization-mode=always
  1. 最後,請將 mysql 新增至 application.properties' spring.profiles.active 屬性,在 Spring Boot 應用程式中啟用 MySQL 適用的 Cloud SQL 設定檔:

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 工具列中的 [Web Preview] (網頁預覽),然後選取 [透過以下埠預覽:8080]。

這樣應該就會在瀏覽器中看見 Spring Petclinic 首頁:

  1. 新增寵物擁有者項目。

選用:確認 Cloud SQL 已保留資料

您可以驗證此處輸入的資料已保留至 Cloud SQL,如下所示。看到系統提示時,按下 Enter 鍵 (Macintosh 則返回)。

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

瞭解詳情