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 USD.
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 של האביב 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.