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

Cloud SQL 是一項全代管資料庫服務,能讓您輕鬆設定、維護、管理及操作 Google Cloud 上的關聯式資料庫。您可以搭配 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。

軟硬體需求

自行設定環境

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

請記住專案 ID,這是所有 Google Cloud 專案中不重複的名稱 (上述名稱已遭占用,因此不適用於您,抱歉!)。本程式碼研究室稍後會將其稱為 PROJECT_ID

  1. 接著,您必須在 Cloud 控制台中啟用帳單,才能使用 Google Cloud 資源。

完成這項程式碼研究室的費用不應超過數美元,但如果您決定使用更多資源,或是將資源繼續執行,則可能會增加費用。

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

啟用 Cloud Shell

  1. 在 Cloud Shell 中,按一下「啟用 Cloud Shell」圖示

如果您從未啟動過 Cloud Shell,系統會顯示中間畫面 (摺疊式螢幕下方),說明 Cloud Shell 的用途。如果發生這種情況,請按一下「繼續」,之後就不會再看到這個畫面。一次性畫面如下所示:

佈建並連線至 Cloud Shell 的作業只需幾分鐘即可完成。

這部虛擬機器搭載各種您需要的開發工具,提供永久的 5 GB 主目錄,而且在 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].
  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
  1. 您現在可以複製並在本機測試 Petclinic 應用程式。
$ git clone https://github.com/spring-projects/spring-petclinic
$ cd spring-petclinic
$ ./mvnw spring-boot:run
  1. 在 Cloud Shell 中按一下「Web Preview」(網頁預覽) ,然後選取「Preview on port 8080」(透過以下通訊埠預覽:8080)

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

  1. 歡迎邊玩邊嘗試,並新增資料。應用程式會使用記憶體內 HyperSQL 資料庫。您現在要從 HyperSQL 切換為使用 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
  1. 您可以使用 Spring Boot 外掛程式正常啟動 Spring Boot 應用程式:
$ ./mvnw -DskipTests spring-boot:run
  1. 應用程式啟動後,請按一下 Cloud Shell 工具列中的「網頁預覽」,然後選取「透過以下通訊埠預覽:8080」

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

  1. 新增寵物主人項目。

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

如這裡所示,您可以確認輸入的資料是否已保存到 Cloud SQL。系統提示輸入密碼時,按下 Enter 鍵 (Macintosh 上的 Return 鍵)。

$ 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 

您已學會在 Spring Boot 應用程式中連線至 Cloud SQL!

瞭解詳情