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

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

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ เม.ย. 22, 2020
account_circleเขียนโดย Googler

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. ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ํา (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)

โปรดทราบว่ารหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ํากันสําหรับโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อข้างต้นมีผู้อื่นนําไปใช้แล้ว ขออภัยในความไม่สะดวก) และจะเรียกใน Codelab นี้ว่า PROJECT_ID ในภายหลัง

  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากรของ Google Cloud

การเรียกใช้ Codelab นี้ไม่ควรมีค่าใช้จ่ายเกิน 2-3 ดอลลาร์ แต่อาจมากกว่านั้นหากคุณตัดสินใจใช้ทรัพยากรเพิ่มเติมหรือปล่อยให้ทรัพยากรทํางาน

ผู้ใช้ใหม่ของ Google Cloud มีสิทธิ์รับช่วงทดลองใช้ฟรี$300

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

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

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

การดําเนินการนี้จะใช้เวลาสักครู่เพื่อจัดสรรและเชื่อมต่อกับ Cloud Shell

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

เมื่อเชื่อมต่อกับ 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`
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
$ ./mvnw spring-boot:run
  1. คลิกแสดงตัวอย่างเว็บ ใน Cloud Shell แล้วเลือกแสดงตัวอย่างบนพอร์ต 8080

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

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

5 ใช้ Cloud SQL ใน Petclinic

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

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

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