Spring Resource soyutlama ile Cloud Storage'daki dosyalara erişme

1. Genel Bakış

Spring Çerçevesi; dosya sistemi, sınıf yolu veya web gibi çeşitli kaynaklardaki dosyaları kolayca okumak ve yazmak için bir ResourceLoader soyutlaması sağlar. Bunun için, bilinen protokol önekini kullanarak kaynağın URI'sini belirtmeniz yeterlidir. Örneğin, yerel dosya sistemindeki bir dosyaya erişmek için file:/data/config.yaml gibi bir URI belirtirsiniz.

Spring Resource soyutlamasını ve gs: protokol önekini kullanarak Cloud Storage'da depolanan dosyalara erişecek bir Spring Boot uygulaması yazacaksınız.

Bunun için Cloud Shell ve Google Cloud SDK gcloud komut satırı aracını kullanabilirsiniz.

Neler öğreneceksiniz?

  • Cloud Storage Yay Başlatma başlatıcıyı kullanma
  • Spring ile Cloud Storage'daki dosyalara erişme
  • Spring'in Resource ve WritableResource soyutlamaları nasıl kullanılır?

Gerekenler

  • Bir Google Cloud projesi
  • Google Chrome gibi bir tarayıcı
  • Vim, Emacs ve GNU Nano gibi standart Linux metin düzenleyicileri hakkında bilgi

Codelab'i nasıl kullanacaksınız?

Salt okunur Alıştırmaları okuyun ve tamamlayın

HTML ve CSS web uygulamaları oluşturma deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

2. Kurulum ve şartlar

Kendi hızınızda ortam kurulumu

  1. Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya G Suite hesabınız yoksa hesap oluşturmanız gerekir.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod laboratuvarın ilerleyen bölümlerinde PROJECT_ID olarak adlandırılacaktır.

  1. Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları 300 ABD doları ücretsiz deneme programından yararlanabilir.

Cloud Shell

Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da, Cloud Shell'i etkinleştir H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_UZQZZGzGzGzqzQzGLzGzGzqqLqSqLG simgesini tıklayın.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Cloud Shell'i daha önce hiç çalıştırmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmında) gösterilir. Bu durumda Devam'ı tıklayın (bunu bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:

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

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.

  1. Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list

Komut çıkışı

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Cloud Storage'da dosya oluşturma

Cloud Shell kullanıma sunulduktan sonra dosya oluşturmaya ve bunları Cloud Storage'a aktarmaya başlayabilirsiniz.

my-file.txt adlı bir dosya oluşturun:

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

Ardından Cloud Storage'da yeni bir benzersiz paket oluşturun ve gsutil dosyasını kullanarak dosyayı oraya aktarın.

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

Cloud Storage'da depolama tarayıcısına gidin ve paket ile dosyanın mevcut olduğunu doğrulayın.

4. Spring Boot uygulamasını başlatma

Spring Initializr ile yeni bir Spring Boot uygulaması oluşturmak için komut satırını kullanarak uygulamayı yazmaya başlayın:

$ curl https://start.spring.io/starter.tgz \
  -d type=maven-project \
  -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -

Başlatıcı'nın, spring-boot-starter-web ve spring-cloud-gcp-starter-storage öğelerini şablon uygulamasının pom.xml içindeki bağımlılıklarınıza otomatik olarak ekleyeceğini unutmayın.

Şablon uygulamasının dizinine geçin:

$ cd spring-gcs

JAVA_HOME öğesinin doğru JDK sürümüne ayarlandığından emin olun:

$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

Uygulamayı Maven kullanarak derleyip çalıştırın.

$ ./mvnw spring-boot:run

Uygulama, 8080 numaralı bağlantı noktasından dinlemeye başlar. Yeni bir Cloud Shell sekmesi açın ve uygulamaya erişmek için curl komutunu çalıştırın.

$ curl localhost:8080

Uygulama henüz faydalı bir özellik sunmadığından 404 yanıtı alırsınız.

Uygulamanın çalıştığı önceki Cloud Shell sekmesine dönün ve Control+C (Macintosh'ta Command+C) ile uygulamayı sonlandırın.

5. Dosyayı Cloud Storage'da okuma

Spring Boot uygulamanızda, daha önce Cloud Storage'da depoladığınız my-file.txt dosyasına erişecek şekilde değişiklik yapın. Hedefiniz dosyanın içeriğini HTTP aracılığıyla döndürmektir.

Aşağıdaki talimatlarda dosyaları düzenlemek için Vim'i kullanacaksınız ancak aynı zamanda Emacs, GNU Nano veya Cloud Shell'deki yerleşik kod düzenleyiciyi de kullanabilirsiniz:

cloud-editor.png

$ cd ~/spring-gcs

Uygulamaya bir REST denetleyicisi GcsController ekleyin.

$ vi src/main/java/com/example/demo/GcsController.java

Aşağıdaki kodu yapıştırın. Daha önce oluşturduğunuz paketle kaynak URI'sini düzeltmeyi unutmayın. echo $BUCKET komutunu çalıştırarak paketi kontrol edebilirsiniz.

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());
  }
}

Uygulamayı Maven ile derleyip çalıştırın:

$ ./mvnw spring-boot:run

Uygulama, 8080 numaralı bağlantı noktasından dinlemeye başlar. Yeni bir Cloud Shell sekmesi açın ve uygulamaya erişmek için curl komutunu çalıştırın.

$ curl localhost:8080

Şimdi, uygulamadan döndürülen dosya içeriğini görmeniz gerekir. Uygulamanın çalıştığı önceki Cloud Shell sekmesine gidin ve Control+C (Macintosh'ta Command+C) ile uygulamayı sonlandırın.

6. Cloud Storage'da dosyaya yazma

Dosyanın içeriğini Cloud Storage'da okudunuz ve dosyayı Spring REST denetleyicisi aracılığıyla kullanıma sundunuz. Şimdi, yeni dosya içeriğini aynı HTTP uç noktasına göndererek dosyanın içeriğini değiştirin.

GcsController uygulamasına, HTTP POST'a yanıt verecek ve verileri Cloud Storage'daki dosyanıza yazacak başka bir yöntem eklemeniz gerekiyor. Bu sefer ilkbahar Resource öğesini WritableResource olarak yayınlayın.

İhtiyacınız olan ek içe aktarma işlemleriyle GcsController dosyasını güncelleyin.

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;

Denetleyiciye yeni uç nokta yöntemini ekleyin.

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";
  }
  ...
}

Uygulamayı Maven ile derleyip çalıştırın:

$ ./mvnw spring-boot:run

Uygulama, 8080 numaralı bağlantı noktasından dinlemeye başlar. Yeni bir Cloud Shell sekmesi açın ve uygulamaya bir mesaj yayınlamak için curl komutunu çalıştırın.

$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080

Dosya içeriğinin güncellendiğini belirten bir onay görürsünüz. Ancak GET yaparak bunu doğrulayın.

$ curl localhost:8080

Uygulamadan döndürülen dosyanın güncellenmiş içeriğini görürsünüz. Uygulamanın çalıştığı önceki Cloud Shell sekmesine dönün ve Control+C (Macintosh'ta Command+C) ile uygulamayı sonlandırın.

7. Tebrikler!

Cloud Storage'daki dosyalara kolayca erişmek için Spring Resource soyutlama yöntemini kullanmayı öğrendiniz. Cloud Storage'da bir dosyayı okuyabilen ve dosyaya yazabilen bir Spring Boot web uygulaması yazdınız. Ayrıca Cloud Storage için bu işlevi sağlayan Spring Boot başlatıcısı hakkında da bilgi edindiniz.

Daha Fazla Bilgi

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.