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

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

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

ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีตั้งค่าอินสแตนซ์ 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 ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

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

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

55efc1aaa7a4d3ad.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

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

เมื่อเชื่อมต่อกับ 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

อัปเดต file pom.xml ของ Maven

อัปเดตไฟล์ pom.xml ตามที่แสดงที่นี่ Starter มีออบเจ็กต์ 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. สุดท้าย ให้เปิดใช้โปรไฟล์ 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 แล้ว

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