۱. مرور کلی
چارچوب Spring یک انتزاع ResourceLoader ارائه میدهد تا بتوانید به راحتی فایلها را از منابع مختلف مانند سیستم فایل، classpath یا وب بخوانید و بنویسید. شما فقط باید URI را با استفاده از پیشوند پروتکل شناخته شده به منبع مشخص کنید. به عنوان مثال، برای دسترسی به یک فایل در سیستم فایل محلی، باید یک URI مانند file:/data/config.yaml مشخص کنید.
شما یک برنامه Spring Boot خواهید نوشت که با استفاده از انتزاع Spring Resource و پیشوند پروتکل gs: به فایلهای ذخیره شده در Cloud Storage دسترسی پیدا میکند.
شما این کار را با استفاده از Cloud Shell و ابزار خط فرمان gcloud مربوط به Cloud SDK انجام خواهید داد.
آنچه یاد خواهید گرفت
- نحوه استفاده از استارتر Cloud Storage Spring Boot
- نحوه دسترسی به فایلها در فضای ذخیرهسازی ابری با Spring
- نحوه استفاده از انتزاعهای
ResourceوWritableResourceدر Spring
آنچه نیاز دارید
- یک پروژه ابری گوگل
- یک مرورگر، مانند گوگل کروم
- آشنایی با ویرایشگرهای متن استاندارد لینوکس مانند Vim، Emacs و GNU Nano
چگونه از codelab استفاده خواهید کرد؟
تجربه خود را در ساخت برنامههای وب HTML و CSS چگونه ارزیابی میکنید؟
تجربه خود را در استفاده از خدمات ابری گوگل چگونه ارزیابی میکنید؟
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. (اگر از قبل حساب Gmail یا G Suite ندارید، باید یکی ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژههای Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.
- در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .
اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعملهای بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش میدهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
پوسته ابری
شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا میشود، استفاده خواهید کرد.
فعال کردن پوسته ابری
- از کنسول ابری، روی فعال کردن پوسته ابری کلیک کنید
.
اگر قبلاً Cloud Shell را شروع نکردهاید، یک صفحه میانی (در زیر صفحه) به شما نمایش داده میشود که توضیح میدهد چیست. در این صورت، روی ادامه کلیک کنید (و دیگر هرگز آن را نخواهید دید). آن صفحه یکبار مصرف به این شکل است:
آمادهسازی و اتصال به Cloud Shell فقط چند لحظه طول میکشد.
این ماشین مجازی با تمام ابزارهای توسعهای که نیاز دارید، مجهز شده است. این ماشین یک دایرکتوری خانگی ۵ گیگابایتی پایدار ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. بخش عمدهای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را میتوان به سادگی با یک مرورگر یا کرومبوک انجام داد.
پس از اتصال به 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].
۳. ایجاد فایل در فضای ذخیرهسازی ابری
پس از راهاندازی 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
به مرورگر ذخیرهسازی در فضای ابری بروید و تأیید کنید که سطل و فایل در آنجا هستند.
۴. مقداردهی اولیه یک برنامه 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
برنامه شروع به گوش دادن به پورت ۸۰۸۰ خواهد کرد. یک تب جدید Cloud Shell باز کنید و curl را برای دسترسی به برنامه اجرا کنید.
$ curl localhost:8080
شما باید با خطای ۴۰۴ مواجه شوید، زیرا برنامه هنوز هیچ کار مفیدی انجام نمیدهد.
به تب قبلی Cloud Shell که برنامه در آن اجرا میشود برگردید و آن را با کلیدهای Control+C (در مکینتاش Command+C ) ببندید.
۵. فایل را در فضای ذخیرهسازی ابری بخوانید
برنامه 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
کد زیر را جایگذاری کنید و فراموش نکنید که آدرس منبع (Resource 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
برنامه شروع به گوش دادن به پورت ۸۰۸۰ میکند. یک تب جدید Cloud Shell باز کنید و curl را برای دسترسی به برنامه اجرا کنید.
$ curl localhost:8080
اکنون باید ببینید که محتوای فایل از برنامه برگردانده شده است. به تب قبلی Cloud Shell که برنامه در آن اجرا میشود بروید و آن را با Control+C (در مکینتاش Command+C ) ببندید.
۶. نوشتن در فایل موجود در فضای ذخیرهسازی ابری
شما محتوای فایل را در فضای ذخیرهسازی ابری خوانده و آن را از طریق یک کنترلر Spring REST در معرض نمایش قرار دادهاید. اکنون، با ارسال محتوای جدید فایل به همان نقطه انتهایی HTTP، محتوای فایل را تغییر دهید.
شما باید یک متد دیگر به GcsController اضافه کنید که به HTTP POST پاسخ دهد و دادهها را در فایل شما در Cloud Storage بنویسد. این بار، 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;
متد endpoint جدید را به کنترلر اضافه کنید.
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
برنامه شروع به گوش دادن به پورت ۸۰۸۰ میکند. یک تب جدید Cloud Shell باز کنید و curl را برای ارسال پیام به برنامه اجرا کنید.
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
شما باید تأییدیهای مبنی بر بهروزرسانی محتوای فایل مشاهده کنید. با این حال، با انجام یک GET ، این موضوع را تأیید کنید.
$ curl localhost:8080
شما باید محتوای بهروزرسانیشدهی فایل برگرداندهشده از برنامه را ببینید. به تب قبلی Cloud Shell که برنامه در آن اجرا میشود برگردید و آن را با Control+C (در مکینتاش Command+C ) ببندید.
۷. تبریک میگویم!
شما یاد گرفتید که از انتزاع Spring Resource برای دسترسی آسان به فایلها در Cloud Storage استفاده کنید. شما یک برنامه وب Spring Boot نوشتید که میتواند یک فایل را در Cloud Storage بخواند و در آن بنویسد. همچنین در مورد شروع کننده Spring Boot برای Cloud Storage که این قابلیت را فعال میکند، آموختید.
اطلاعات بیشتر
مجوز
این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.