เชื่อมต่อแอป Spring Boot กับ Cloud SQL

1. ก่อนเริ่มต้น

Cloud SQL เป็นบริการฐานข้อมูลที่มีการจัดการครบวงจรซึ่งง่ายต่อการตั้งค่า บำรุงรักษา จัดการ และดูแลฐานข้อมูลเชิงสัมพันธ์บน Google Cloud คุณใช้ Cloud SQL กับ Cloud SQL สำหรับ MySQL หรือ Cloud SQL สำหรับ PostgreSQL ได้

ใน Codelab นี้ คุณจะได้ดูวิธีตั้งค่า Cloud SQL สำหรับอินสแตนซ์ MySQL แล้วอัปเดตแอป Spring Boot เพื่อใช้อินสแตนซ์ Cloud SQL เป็นพื้นที่เก็บข้อมูลแบ็กเอนด์ Spring Boot Starter สำหรับ Google Cloud SQL มีDataSourceที่กำหนดค่าโดยอัตโนมัติ ซึ่งช่วยให้คุณใช้ประโยชน์จาก Cloud SQL ได้อย่างง่ายดายโดยไม่ต้องเปลี่ยนแปลงโค้ดมากนัก Codelab นี้ใช้ซอร์สโค้ด Spring Petclinic

ข้อกำหนดเบื้องต้น

  • ความคุ้นเคยกับภาษาและเครื่องมือในการเขียนโปรแกรม Java
  • ความรู้เกี่ยวกับเครื่องมือแก้ไขข้อความมาตรฐานของ Linux เช่น Vim, Emacs และ Nano

สิ่งที่คุณจะต้องทำ

  • ใช้ Cloud SQL ในแอป Spring Boot

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud
  • เบราว์เซอร์ เช่น Google Chrome หรือ Firefox

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตวิธีการชำระเงินได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น PROJECT_ID) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้ใช้งานหรือไม่ คุณจะเปลี่ยนแปลงหลังจากขั้นตอนนี้ไม่ได้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ ซึ่ง API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าเหล่านี้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้จะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินที่นอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud ใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรี$300 USD

เปิดใช้งาน Cloud Shell

  1. คลิกเปิดใช้งาน Cloud Shell 853e55310c205094.png จาก Cloud Console

55efc1aaa7a4d3ad.png

หากเริ่มต้นใช้งาน Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอตรงกลางที่อธิบายว่านี่คืออะไร หากระบบแสดงหน้าจอตรงกลาง ให้คลิกต่อไป

9c92662c6a846a5c.png

การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที

9f0e51b578fecce5.png

เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่จำเป็น โดยมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก หรืองานส่วนใหญ่ใน Codelab นี้ก็สามารถทำได้ผ่านเบราว์เซอร์

เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นข้อความตรวจสอบสิทธิ์และโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์แล้ว

  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. ตั้งค่า Cloud SQL สำหรับอินสแตนซ์ MySQL

  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
  1. ตรวจสอบว่าได้ตั้งค่าเวอร์ชัน Java ที่ถูกต้องแล้วเรียกใช้แอป Petclinic ในเครื่อง
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

$ ./mvnw spring-boot:run
  1. คลิกตัวอย่างเว็บ1a94d5bd10bfc072.png ใน Cloud Shell จากนั้นเลือกแสดงตัวอย่างบนพอร์ต 8080

3aca52f76c6c22a3.png

คุณควรเห็นหน้าแรกของ Petclinic ดังที่แสดงไว้ที่นี่ในเบราว์เซอร์ของคุณ

34e0d4f1e1765560.png

  1. ทดลองเล่นและเพิ่มข้อมูล แอปใช้ฐานข้อมูล HyperSQL ในหน่วยความจำ ตอนนี้คุณจะเปลี่ยนจาก HyperSQL ไปใช้ Cloud SQL เป็นฐานข้อมูล

5. ใช้ Cloud SQL ใน Petclinic

อัปเดตไฟล์ Maven pom.xml

อัปเดตไฟล์ pom.xml ดังที่แสดงที่นี่ เงื่อนไขเริ่มต้นจะมีออบเจ็กต์ DataSource ที่กำหนดค่าอัตโนมัติเพื่อเชื่อมต่อกับฐานข้อมูล Cloud SQL คุณสามารถใช้ Vim, นาโน หรือ 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. สุดท้าย เปิดใช้ Cloud SQL สำหรับโปรไฟล์ MySQL ในแอป Spring Boot โดยการเพิ่ม mysql ไปยัง application.properties' พร็อพเพอร์ตี้ 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. เมื่อแอปเริ่มทำงานแล้ว ให้คลิกตัวอย่างเว็บ1a94d5bd10bfc072.pngในแถบเครื่องมือ Cloud Shell จากนั้นเลือกแสดงตัวอย่างบนพอร์ต 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. ขอแสดงความยินดี

คุณรู้วิธีเชื่อมต่อกับ Cloud SQL ในแอป Spring Boot แล้ว

ดูข้อมูลเพิ่มเติม