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

1. بررسی اجمالی

Spring Framework یک انتزاع ResourceLoader برای خواندن و نوشتن آسان فایل ها از منابع مختلف مانند سیستم فایل، classpath یا وب فراهم می کند. شما فقط باید URI منبع را با استفاده از پیشوند پروتکل معروف مشخص کنید. به عنوان مثال، برای دسترسی به یک فایل در سیستم فایل محلی، یک file:/data/config.yaml .

شما یک برنامه Spring Boot می نویسید که با استفاده از انتزاع منابع Spring و پیشوند پروتکل gs: به فایل های ذخیره شده در Cloud Storage دسترسی خواهد داشت.

این کار را با استفاده از Cloud Shell و Cloud SDK gcloud ابزار خط فرمان انجام خواهید داد.

چیزی که یاد خواهید گرفت

  • نحوه استفاده از Cloud Storage Spring Boot Starter
  • نحوه دسترسی به فایل‌ها در فضای ذخیره‌سازی ابری با Spring
  • نحوه استفاده از انتزاع Resource Spring و WritableResource

آنچه شما نیاز دارید

  • یک پروژه Google Cloud
  • یک مرورگر، مانند گوگل کروم
  • آشنایی با ویرایشگرهای متن استاندارد لینوکس مانند Vim، Emacs و GNU Nano

چگونه از Codelab استفاده خواهید کرد؟

فقط بخوانید تمرینات را بخوانید و کامل کنید

تجربه خود را با ساختن برنامه های وب HTML و CSS چگونه ارزیابی می کنید؟

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

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

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

2. راه اندازی و الزامات

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

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJHHXieCvXw5 Zw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aTQz5GpG0T

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8CXUF

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

  1. در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورت‌حساب را در Cloud Console فعال کنید .

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

پوسته ابری

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

Cloud Shell را فعال کنید

  1. از Cloud Console، روی Activate Cloud Shell کلیک کنید H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0ZlWzVDLWD2Ca0ZlUZRWLXT دی کیو .

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4ZIRF6HQWQ2 rbzQ

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

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4tw1Uo6VRh1

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

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyRvcD

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.

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

  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].

3. یک فایل در Cloud Storage ایجاد کنید

پس از راه اندازی Cloud Shell، می توانید شروع به ایجاد فایل ها و انتقال آنها به Cloud Storage کنید.

یک فایل با نام my-file.txt ایجاد کنید:

$ echo "Hello World from GCS" > my-file.txt

سپس یک سطل منحصر به فرد جدید در فضای ذخیره سازی ابری ایجاد کنید و فایل را با استفاده از gsutil به آنجا منتقل کنید.

$ BUCKET=spring-bucket-$USER
$ gsutil makebucket gs://$BUCKET
$ gsutil copy my-file.txt gs://$BUCKET

به مرورگر ذخیره سازی در فضای ذخیره سازی ابری بروید و بررسی کنید که سطل و فایل در آنجا هستند.

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

مطمئن شوید که 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 در مکینتاش) بکشید.

5. فایل را در Cloud Storage بخوانید

برنامه Spring Boot خود را برای دسترسی به my-file.txt ، فایلی که قبلاً در Cloud Storage ذخیره کرده‌اید، تغییر دهید. هدف شما این است که به سادگی محتویات فایل را از طریق HTTP برگردانید.

در دستورالعمل‌های زیر، از Vim برای ویرایش فایل‌ها استفاده می‌کنید، اما می‌توانید از Emacs، GNU Nano یا ویرایشگر کد داخلی در Cloud Shell نیز استفاده کنید:

cloud-editor.png

$ 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 در مکینتاش) بکشید.

6. در Cloud Storage روی فایل بنویسید

شما محتویات فایل را در Cloud Storage می خوانید و آن را از طریق یک کنترلر Spring REST در معرض دید قرار می دهید. حال، با ارسال محتوای فایل جدید به همان نقطه پایانی HTTP، محتویات فایل را تغییر دهید.

شما باید روش دیگری را به GcsController اضافه کنید که به HTTP POST پاسخ دهد و داده ها را در فایل شما در Cloud Storage بنویسد. این بار Resource Spring را روی 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 در مکینتاش) بکشید.

7. تبریک می گویم!

شما یاد گرفتید که از انتزاع منابع Spring برای دسترسی آسان به فایل ها در Cloud Storage استفاده کنید. شما یک برنامه وب Spring Boot نوشتید که می تواند یک فایل را در Cloud Storage بخواند و بنویسد. همچنین درباره راه‌انداز Spring Boot برای فضای ذخیره‌سازی ابری که این قابلیت را فعال می‌کند، یاد گرفتید.

بیشتر بدانید

مجوز

این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.