ربط تطبيق Spring Boot بخدمة Cloud SQL

1. قبل البدء

Cloud SQL هي خدمة قواعد بيانات مُدارة بالكامل تسهّل إعداد قواعد البيانات الارتباطية وصيانتها وإدارتها على Google Cloud. يمكنك استخدام Cloud SQL مع Cloud SQL for MySQL أو Cloud SQL for PostgreSQL.

في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية إعداد مثيل Cloud SQL for MySQL، ثم تعديل تطبيق Spring Boot لاستخدام مثيل Cloud SQL كمساحة تخزين خلفية. يوفر Spring Boot Starter for Google Cloud SQL DataSource تم إعداده تلقائيًا، ما يتيح لك الاستفادة بسهولة من Cloud SQL مع إجراء الحد الأدنى من التغييرات على الرمز البرمجي. يستخدم هذا الدرس التطبيقي حول الترميز رمز المصدر الخاص بتطبيق Spring Petclinic.

المتطلبات الأساسية

  • معرفة بلغة البرمجة Java وأدواتها
  • معرفة أدوات تحرير النصوص العادية في Linux، مثل Vim وEmacs وnano

المهام التي ستنفذها

  • استخدام Cloud SQL في تطبيق Spring Boot

المتطلبات

  • مشروع على السحابة الإلكترونية من Google
  • متصفّح، مثل Google Chrome أو Firefox

2. الإعداد والمتطلبات

إعداد البيئة بالسرعة التي تناسبك

  1. سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
  • رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف مشروعك (يُشار إليه عادةً باسم PROJECT_ID). إذا لم يعجبك المعرّف الذي تم إنشاؤه، يمكنك إنشاء معرّف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع.
  • للعلم، هناك قيمة ثالثة، وهي رقم المشروع، تستخدمها بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير، إن وُجدت أي تكلفة على الإطلاق. لإيقاف الموارد وتجنُّب تحمّل تكاليف تتجاوز هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

تفعيل Cloud Shell

  1. من Cloud Console، انقر على تفعيل Cloud Shell 853e55310c205094.png.

55efc1aaa7a4d3ad.png

إذا كانت هذه هي المرة الأولى التي تبدأ فيها Cloud Shell، ستظهر لك شاشة وسيطة توضّح ماهية هذه الخدمة. إذا ظهرت لك شاشة وسيطة، انقر على متابعة.

9c92662c6a846a5c.png

يستغرق توفير Cloud Shell والاتصال به بضع لحظات فقط.

9f0e51b578fecce5.png

يتم تحميل هذا الجهاز الافتراضي بجميع أدوات التطوير اللازمة. توفّر هذه الخدمة دليلًا رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل في 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 for 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 for 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.

مزيد من المعلومات