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
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนถูกใช้ไปแล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID
ในภายหลังใน Codelab นี้
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การทำตาม Codelab นี้ไม่น่าจะมีค่าใช้จ่ายเกิน 2-3 ดอลลาร์ แต่ก็อาจมีค่าใช้จ่ายมากกว่านี้หากคุณตัดสินใจใช้ทรัพยากรเพิ่มเติมหรือปล่อยให้ทรัพยากรทำงานต่อไป
ผู้ใช้ใหม่ของ Google Cloud มีสิทธิ์ทดลองใช้ฟรี$300
เปิดใช้งาน Cloud Shell
- จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell
หากไม่เคยเริ่มใช้ Cloud Shell มาก่อน คุณจะเห็นหน้าจอระดับกลาง (ด้านล่าง) ที่อธิบายว่า Cloud Shell คืออะไร ในกรณีนี้ ให้คลิกต่อไป (และคุณจะไม่เห็นหน้าจอนี้อีก) หน้าจอแบบครั้งเดียวจะมีลักษณะดังนี้
การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน
เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่คงอยู่ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานในโค้ดแล็บนี้ได้โดยใช้เพียงเบราว์เซอร์หรือ Chromebook
เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณแล้ว
- เรียกใช้คำสั่งต่อไปนี้ใน 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].
- หลังจากเปิด Cloud Shell แล้ว คุณจะใช้บรรทัดคำสั่งเพื่อสร้างอินสแตนซ์ Cloud SQL ใหม่ได้โดยทำดังนี้
$ gcloud sql instances create my-instance
เมื่อการดำเนินการนี้เสร็จสมบูรณ์แล้ว อินสแตนซ์จะพร้อมใช้งาน
- ตอนนี้ให้สร้างฐานข้อมูลที่จะใช้สำหรับแอป Petclinic โดยทำดังนี้
$ gcloud sql databases create petclinic --instance my-instance
นอกจากนี้ คุณยังเข้าถึงและกำหนดค่าอินสแตนซ์ผ่าน Cloud Console ได้ด้วย
- รับชื่อการเชื่อมต่ออินสแตนซ์ในรูปแบบ
project-id:zone-id:instance-id
โดยเรียกใช้คำสั่งต่อไปนี้ คุณจะใช้ข้อมูลนี้ในภายหลังเมื่อกำหนดค่าแอป Spring Boot
$ gcloud sql instances describe my-instance |grep connectionName
- ตอนนี้คุณจะโคลนและทดสอบแอป Petclinic ในเครื่อง
$ git clone https://github.com/spring-projects/spring-petclinic $ cd spring-petclinic $ ./mvnw spring-boot:run
- คลิกตัวอย่างเว็บ
ใน Cloud Shell แล้วเลือกแสดงตัวอย่างบนพอร์ต 8080
คุณควรเห็นหน้าแรกของ Petclinic ดังที่แสดงที่นี่ในเบราว์เซอร์
- ลองเล่นและเพิ่มข้อมูล แอปใช้ฐานข้อมูล HyperSQL ในหน่วยความจำ ตอนนี้คุณจะเปลี่ยนจาก HyperSQL ไปใช้ Cloud SQL เป็นฐานข้อมูล
อัปเดตไฟล์ Maven pom.xml
อัปเดตไฟล์ 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>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
- แทนที่เนื้อหาของ
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
- สุดท้าย ให้เปิดใช้โปรไฟล์ 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
- คุณสามารถเริ่มแอป Spring Boot ได้ตามปกติด้วยปลั๊กอิน Spring Boot โดยทำดังนี้
$ ./mvnw -DskipTests spring-boot:run
- เมื่อแอปเริ่มทำงานแล้ว ให้คลิกตัวอย่างเว็บ
ในแถบเครื่องมือ Cloud Shell แล้วเลือกแสดงตัวอย่างบนพอร์ต 8080
คุณควรเห็นหน้าแรกของ Spring Petclinic อีกครั้งตามที่แสดงที่นี่ในเบราว์เซอร์
- เพิ่มรายการเจ้าของสัตว์เลี้ยง
ไม่บังคับ: ยืนยันว่า Cloud SQL ได้บันทึกข้อมูลอย่างถาวรแล้ว
คุณสามารถยืนยันว่าระบบได้บันทึกข้อมูลที่คุณป้อนลงใน Cloud SQL แล้วตามที่แสดงที่นี่ กด Enter (Return ใน 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
คุณได้เรียนรู้วิธีเชื่อมต่อกับ Cloud SQL ในแอป Spring Boot แล้ว