חיבור אפליקציית Springboot ל-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 for Google Cloud SQL מספק DataSource שהוגדר אוטומטית, ומאפשר לכם ליהנות בקלות מ-Cloud SQL עם שינויים מינימליים בקוד. ב-codelab הזה נעשה שימוש בקוד המקור של Spring Petclinic.

דרישות מוקדמות

  • היכרות עם שפת התכנות Java ועם כלים
  • ידע בכלי עריכת טקסט סטנדרטיים של Linux, כמו Vim,‏ Emacs ו-nano

מה תעשו

  • שימוש ב-Cloud SQL באפליקציית Spring Boot.

מה תצטרכו

2. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר לאורך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

הפעלת Cloud Shell

  1. ב-Cloud Console, לוחצים על Activate Cloud Shell 853e55310c205094.png.

55efc1aaa7a4d3ad.png

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים עם תיאור של השירות. אם הוצג לכם מסך ביניים, לחצו על המשך.

9c92662c6a846a5c.png

הקצאת המשאבים והחיבור ל-Cloud Shell נמשכים רק כמה רגעים.

9f0e51b578fecce5.png

המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-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, ב-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.

מידע נוסף