1. סקירה כללית
Spring Framework מספק ResourceLoader הפשטה לקריאה וכתיבה קלות של קבצים ממקורות שונים, כמו מערכת הקבצים, נתיב המחלקה או האינטרנט. פשוט מציינים את ה-URI למשאב באמצעות קידומת הפרוטוקול המוכרת. לדוגמה, כדי לגשת לקובץ במערכת הקבצים המקומית, צריך לציין URI כמו file:/data/config.yaml.
תכתבו אפליקציית Spring Boot שתגשת לקבצים שמאוחסנים ב-Cloud Storage באמצעות הפשטת המשאבים של Spring והתחילית של הפרוטוקול gs:.
תעשו את זה באמצעות Cloud Shell וכלי שורת הפקודה של Google Cloud.
מה תלמדו
- איך משתמשים ב-Cloud Storage Spring Boot starter
- איך ניגשים לקבצים ב-Cloud Storage באמצעות Spring
- איך משתמשים בהפשטות
Resourceו-WritableResourceשל Spring
מה תצטרכו
- פרויקט ב-Google Cloud
- דפדפן, כמו Google Chrome
- היכרות עם כלים לעריכת טקסט של Linux, כמו Vim, Emacs ו-GNU Nano
איך תשתמשו ב-codelab?
מה מידת שביעות הרצון שלך מחוויית הפיתוח של אפליקציות אינטרנט באמצעות HTML ו-CSS?
איזה דירוג מתאים לדעתך לחוויית השימוש שלך בשירותי Google Cloud?
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים אל Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, אתם צריכים ליצור חשבון).
חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא יתאים לכם, מצטערים!). בהמשך ה-codelab הזה נתייחס אליו כאל PROJECT_ID.
- לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. חשוב לפעול לפי ההוראות שבקטע 'ניקוי' כדי להשבית את המשאבים, וכך לא תחויבו על שימוש מעבר למה שמוסבר במדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
Cloud Shell
תשתמשו ב- Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud.
הפעלת Cloud Shell
- ב-Cloud Console, לוחצים על Activate Cloud Shell
.
אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים (בחלק הנגלל) עם תיאור של Cloud Shell. במקרה כזה, לוחצים על המשך (והמסך הזה לא יוצג לכם יותר). כך נראה המסך החד-פעמי:
הקצאת המשאבים והחיבור ל-Cloud Shell נמשכים רק כמה רגעים.
המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות של הרשת. אפשר לבצע את רוב העבודה ב-codelab הזה, אם לא את כולה, באמצעות דפדפן או 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
מוודאים שגרסת ה-JDK הנכונה מוגדרת ב-JAVA_HOME:
$ 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. הפעם, מפעילים Cast של Spring 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 כדי לגשת בקלות לקבצים ב-Cloud Storage. כתבתם אפליקציית אינטרנט של Spring Boot שיכולה לקרוא ולכתוב קובץ ב-Cloud Storage. למדתם גם על Spring Boot starter ל-Cloud Storage שמאפשר את הפונקציונליות הזו.
מידע נוסף
- Cloud Storage
- Spring Framework ב-Google Cloud
- מאגר GitHub של Spring ב-Google Cloud
- Java ב-Google Cloud
רישיון
העבודה הזו בשימוש במסגרת רישיון Creative Commons שמותנה בייחוס כללי מגרסה 2.0.