1. סקירה כללית
Spring Framework מספק הפשטה של ResourceLoader
לקריאה ולכתיבה של קבצים בקלות ממקורות שונים, כגון מערכת הקבצים, classpath או אינטרנט. צריך רק לציין את ה-URI למשאב באמצעות קידומת הפרוטוקול המוכרת. לדוגמה, כדי לגשת לקובץ במערכת הקבצים המקומית, צריך לציין URI כמו file:/data/config.yaml
.
כותבים אפליקציית Spring Boot שתיגש לקבצים שמאוחסנים ב-Cloud Storage באמצעות הפשטה של Spring Resource וקידומת הפרוטוקול gs:
.
אפשר לעשות את זה באמצעות Cloud Shell וכלי שורת הפקודה של Cloud SDK של gcloud.
מה תלמדו
- איך משתמשים באתחול Spring Spring ב-Cloud Storage
- איך ניגשים לקבצים ב-Cloud Storage באמצעות Spring
- איך להשתמש בהפשטות
Resource
ו-WritableResource
של אביב
מה צריך להכין
- פרויקט ב-Google Cloud
- דפדפן, כמו Google Chrome
- היכרות עם עורכי טקסט סטנדרטיים של Linux, כגון Vim, Emacs ו-GNU Nano
איך תשתמשו ב-Codelab?
איזה דירוג מגיע לדעתך לחוויה שלך עם אפליקציות אינטרנט של HTML ו-CSS?
איזה דירוג מגיע לדעתך לחוויית השימוש שלך בשירותי Google Cloud?
2. הגדרה ודרישות
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, עליכם ליצור חשבון).
חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID
.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.
מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
Cloud Shell
משתמשים ב- Cloud Shell, סביבת שורת הפקודה שפועלת ב-Google Cloud.
הפעלת Cloud Shell
- במסוף Cloud, לוחצים על Activate 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
כדי להתחיל לכתוב את האפליקציה, משתמשים בשורת הפקודה כדי ליצור אפליקציית Springboot חדשה עם 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 -
חשוב לשים לב שהאתחול יוסיף באופן אוטומטי את 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
משנים את אפליקציית Springboot כדי לגשת אל my-file.txt
, הקובץ שאחסנתם בעבר ב-Cloud Storage. המטרה שלכם היא פשוט להחזיר את התוכן של הקובץ דרך HTTP.
בהוראות הבאות תשתמשו ב-Vim כדי לערוך את הקבצים, אבל תוכלו גם להשתמש ב-Emmacs, 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 וחשיפתם אותו באמצעות בקר REST ב-Spring. עכשיו, משנים את תוכן הקובץ על ידי פרסום התוכן החדש של הקובץ באותה נקודת קצה (endpoint) של 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 Resource כדי לגשת בקלות לקבצים ב-Cloud Storage. כתבתם אפליקציית אינטרנט של Spring Boot שיכולה לקרוא ולכתוב בקובץ ב-Cloud Storage. למדתם גם על הסימן לתחילת פעולה ב-Spring Boot ב-Cloud Storage שמאפשר את הפונקציונליות הזו.
מידע נוסף
רישיון
היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.