با انتزاع منابع Spring به فایل‌های موجود در فضای ابری دسترسی پیدا کنید

۱. مرور کلی

چارچوب 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 چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

تجربه خود را در استفاده از خدمات ابری گوگل چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

۲. تنظیمات و الزامات

تنظیم محیط خودتنظیم

  1. وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. (اگر از قبل حساب Gmail یا G Suite ندارید، باید یکی ایجاد کنید .)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aTQz5GpG0T

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5 OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه‌های Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.

  1. در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .

اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعمل‌های بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش می‌دهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

پوسته ابری

شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا می‌شود، استفاده خواهید کرد.

فعال کردن پوسته ابری

  1. از کنسول ابری، روی فعال کردن پوسته ابری کلیک کنید H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ .

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

اگر قبلاً Cloud Shell را شروع نکرده‌اید، یک صفحه میانی (در زیر صفحه) به شما نمایش داده می‌شود که توضیح می‌دهد چیست. در این صورت، روی ادامه کلیک کنید (و دیگر هرگز آن را نخواهید دید). آن صفحه یکبار مصرف به این شکل است:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

آماده‌سازی و اتصال به Cloud Shell فقط چند لحظه طول می‌کشد.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

این ماشین مجازی با تمام ابزارهای توسعه‌ای که نیاز دارید، مجهز شده است. این ماشین یک دایرکتوری خانگی ۵ گیگابایتی پایدار ارائه می‌دهد و در فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. بخش عمده‌ای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را می‌توان به سادگی با یک مرورگر یا کروم‌بوک انجام داد.

پس از اتصال به Cloud Shell، باید ببینید که از قبل احراز هویت شده‌اید و پروژه از قبل روی شناسه پروژه شما تنظیم شده است.

  1. برای تأیید احراز هویت، دستور زیر را در 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 نیز استفاده کنید:

ویرایشگر ابری.png

$ 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 منتشر شده است.