1. نظرة عامة
يوفّر إطار عمل الربيع طريقة ResourceLoader
لقراءة الملفات وكتابتها بسهولة من مصادر مختلفة، مثل نظام الملفات أو مسار الفئة أو الويب. تحتاج ببساطة إلى تحديد عنوان URI للمورد باستخدام بادئة البروتوكول المعروفة. على سبيل المثال، للوصول إلى ملف على نظام الملفات المحلي، يمكنك تحديد معرف موارد منتظم (URI) مثل file:/data/config.yaml
.
ستكتب تطبيق Spring Boot الذي سيصل إلى الملفات المخزنة في Cloud Storage باستخدام تجريد Spring Resource وبادئة بروتوكول gs:
.
ويمكنك إجراء ذلك باستخدام Cloud Shell وأداة سطر أوامر gcloud SDK للسحابة الإلكترونية.
المعلومات التي ستطّلع عليها
- كيفية استخدام إجراء بدء التشغيل الربيعي في Cloud Storage
- كيفية الوصول إلى الملفات في Cloud Storage من خلال Spring
- كيفية استخدام صورتَي
Resource
وWritableResource
في فصل الربيع
المتطلبات
- مشروع على Google Cloud
- متصفّح، مثل Google Chrome
- الإلمام بأدوات تحرير النصوص القياسية في Linux، مثل Vim وEmacs وGNU Nano
كيف ستستخدم الدرس التطبيقي حول الترميز؟
كيف تقيّم تجربتك في إنشاء تطبيقات ويب بتنسيق HTML وCSS؟
ما هو تقييمك لتجربتك في استخدام خدمات Google Cloud؟
2. الإعداد والمتطلبات
إعداد بيئة ذاتية
- سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. (إذا لم يكن لديك حساب على Gmail أو G Suite، عليك إنشاء حساب.)
يُرجى تذكُّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (سبق أن تم استخدام الاسم أعلاه ولن يكون مناسبًا لك). ستتم الإشارة إليها لاحقًا في هذا الدرس التطبيقي حول الترميز باسم PROJECT_ID
.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.
إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "الحذف سريعًا". الذي يقدم لك نصائح حول كيفية إيقاف تشغيل الموارد حتى لا تتكبّد أي فواتير خارج نطاق هذا البرنامج التعليمي. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج الفترة التجريبية المجانية التي تبلغ قيمتها 300 دولار أمريكي.
Cloud Shell
ستستخدم Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في Google Cloud.
تفعيل Cloud Shell
- من Cloud Console، انقر على تفعيل Cloud Shell .
إذا لم يسبق لك بدء تشغيل Cloud Shell، ستظهر لك شاشة وسيطة (الجزء السفلي غير المرئي من الصفحة) تصف ماهيتها. إذا كان الأمر كذلك، فانقر على متابعة (ولن تراه مرة أخرى مطلقًا). إليك ما تبدو عليه هذه الشاشة التي تُستخدم لمرة واحدة:
من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بخدمة Cloud Shell بضع دقائق فقط.
يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في 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].
3- إنشاء ملف في Cloud Storage
بعد إطلاق Cloud Shell، يمكنك البدء في إنشاء الملفات ونقلها إلى Cloud Storage.
إنشاء ملف باسم my-file.txt
:
$ echo "Hello World from GCS" > my-file.txt
بعد ذلك، يمكنك إنشاء حزمة فريدة جديدة في Cloud Storage ونقل الملف إليها باستخدام gsutil
.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
انتقِل إلى متصفّح مساحة التخزين في Cloud Storage وتحقّق من توفّر الحزمة والملف فيها.
4. إعداد تطبيق Spring Boot
ابدأ في كتابة التطبيق باستخدام سطر الأوامر لإنشاء تطبيق Spring Boot جديد باستخدام Spring Initializr:
$ curl https://start.spring.io/starter.tgz \ -d type=maven-project \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
تجدر الإشارة إلى أنّ أداة Initializr ستضيف تلقائيًا spring-boot-starter-web
وspring-cloud-gcp-starter-storage
إلى العناصر الاعتمادية الخاصة بك في pom.xml
من تطبيق النموذج.
التغيير إلى دليل تطبيق النموذج:
$ cd spring-gcs
تأكَّد من ضبط JAVA_HOME
على إصدار JDK الصحيح:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
أنشئ التطبيق وشغِّله باستخدام Maven.
$ ./mvnw spring-boot:run
سيبدأ التطبيق الاستماع عبر المنفذ 8080. افتح علامة تبويب جديدة في Cloud Shell وشغِّل curl
للوصول إلى التطبيق.
$ curl localhost:8080
من المفترض أن تحصل على استجابة 404 لأن التطبيق لا يفعل أي شيء مفيد حتى الآن.
ارجع إلى علامة تبويب Cloud Shell السابقة التي يتم تشغيل التطبيق فيها واعمل على إنهائها باستخدام Control+C
(Command+C
على Macintosh).
5- قراءة الملف في Cloud Storage
يمكنك تعديل تطبيق Spring Boot للوصول إلى my-file.txt
، وهو الملف الذي خزّنته في السابق على Cloud Storage. هدفك هو ببساطة عرض محتويات الملف عن طريق HTTP.
في التعليمات التالية، ستستخدم Vim لتعديل الملفات، ولكن يمكنك أيضًا استخدام Emacs أو GNU Nano أو أداة تعديل الرموز المضمَّنة في Cloud Shell:
$ cd ~/spring-gcs
أضِف وحدة تحكُّم REST GcsController
إلى التطبيق.
$ vi src/main/java/com/example/demo/GcsController.java
الصق الرمز التالي، ولا تنس إصلاح عنوان URI للمورد باستخدام الحزمة التي أنشأتها سابقًا. يمكنك التحقّق من الحزمة من خلال تنفيذ الأمر echo $BUCKET
.
src/main/java/com/example/demo/GcsController.java
package com.example.demo;
import java.io.IOException;
import java.nio.charset.Charset;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GcsController {
@Value("gs://REPLACE_WITH_YOUR_BUCKET/my-file.txt")
private Resource gcsFile;
@GetMapping("/")
public String readGcsFile() throws IOException {
return StreamUtils.copyToString(
gcsFile.getInputStream(),
Charset.defaultCharset());
}
}
إنشاء التطبيق وتشغيله باستخدام Maven:
$ ./mvnw spring-boot:run
يبدأ التطبيق الاستماع عبر المنفذ 8080. افتح علامة تبويب جديدة في Cloud Shell وشغِّل curl
للوصول إلى التطبيق.
$ curl localhost:8080
من المفترض أن ترى الآن محتوى الملف الذي تم عرضه من التطبيق. انتقِل إلى علامة تبويب Cloud Shell السابقة التي يتم تشغيل التطبيق فيها، واعمل على إنهائه باستخدام Control+C
(Command+C
على Macintosh).
6- الكتابة في الملف في Cloud Storage
تقرأ محتوى الملف في Cloud Storage وأظهرته من خلال وحدة تحكّم Spring REST. والآن، يمكنك تغيير محتوى الملف من خلال نشر محتوى الملف الجديد إلى نقطة نهاية HTTP نفسها.
يجب إضافة طريقة أخرى إلى GcsController
للاستجابة إلى طلب HTTP POST وكتابة البيانات في ملفك في Cloud Storage. هذه المرة، بث ربيع Resource
على "WritableResource
".
يمكنك تعديل GcsController
بعمليات استيراد إضافية تحتاجها.
src/main/java/com/example/demo/GcsController.java
import java.io.OutputStream;
import org.springframework.core.io.WritableResource;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PostMapping;
أضف طريقة نقطة النهاية الجديدة إلى وحدة التحكم.
src/main/java/com/example/demo/GcsController.java
@RestController
public class GcsController {
@PostMapping("/")
String writeGcs(@RequestBody String data) throws IOException {
try (OutputStream os = ((WritableResource) gcsFile).getOutputStream()) {
os.write(data.getBytes());
}
return "file was updated\n";
}
...
}
إنشاء التطبيق وتشغيله باستخدام Maven:
$ ./mvnw spring-boot:run
يبدأ التطبيق الاستماع عبر المنفذ 8080. يمكنك فتح علامة تبويب جديدة في Cloud Shell وتشغيل curl
لنشر رسالة في التطبيق.
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
من المفترض أن يظهر لك تأكيد بأنه تم تعديل محتوى الملف. ومع ذلك، يمكنك التحقق من ذلك من خلال إجراء GET
.
$ curl localhost:8080
ومن المفترض أن يظهر لك المحتوى المعدّل للملف الذي يعرضه التطبيق. ارجع إلى علامة تبويب Cloud Shell السابقة التي يتم تشغيل التطبيق فيها واعمل على إنهائها باستخدام Control+C
(Command+C
على Macintosh).
7. تهانينا
لقد تعلمت استخدام تجريد Spring Resource للوصول إلى الملفات بسهولة في Cloud Storage. لقد كتبت تطبيق ويب Spring Boot يمكنه القراءة والكتابة إلى ملف في Cloud Storage. لقد تعرفت أيضًا على إجراء التفعيل لـ Spring Boot على Cloud Storage الذي يتيح هذه الوظيفة.
مزيد من المعلومات
- التخزين في السحابة الإلكترونية
- إطار عمل الربيع على Google Cloud
- مستودع GitHub في Google Cloud
- Java على Google Cloud
الترخيص
هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.