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

1. Genel Bakış

Spring Framework, dosya sistemi, sınıf yolu veya web gibi çeşitli kaynaklardan dosyaları kolayca okuyup yazmak için ResourceLoader soyutlaması sağlar. 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.

Bunu Cloud Shell ve Google Cloud SDK gcloud komut satırı aracını kullanarak yapacaksınız.

Neler öğreneceksiniz?

  • Cloud Storage Spring Boot başlatıcısını kullanma
  • Spring ile Cloud Storage'daki dosyalara erişme
  • Spring'in Resource ve WritableResource soyutlamalarını kullanma

Gerekenler

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

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

Salt okuma Okuma ve alıştırmaları tamamlama

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

Yeni başlayan Orta düzey Uzman

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

Başlangıç Orta İleri

2. Kurulum ve şartlar

Yönlendirmesiz ortam kurulumu

  1. Cloud Console'da oturum açın ve 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

Proje kimliğini unutmayın. Bu kimlik, tüm Google Cloud projelerinde benzersiz bir addır (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır). Bu codelab'in ilerleyen kısımlarında PROJECT_ID olarak adlandırılacaktır.

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

Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları nasıl kapatacağınız konusunda size tavsiyelerde bulunan "Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ü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 'i H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ tıklayın.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Cloud Shell'i daha önce hiç başlatmadıysanız ne olduğunu açıklayan bir ara ekran (sayfanın alt kısmında) gösterilir. Bu durumda Devam'ı tıkladığınızda bu ekranı bir daha görmezsiniz. Bu tek seferlik ekran aşağıdaki gibi görünür:

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

Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını yalnızca bir tarayıcı veya Chromebook'unuzla yapabilirsiniz.

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. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu 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>

Değilse şu komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Cloud Storage'da dosya oluşturma

Cloud Shell başlatıldıktan 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 ve benzersiz bir paket oluşturun ve gsutil kullanarak dosyayı bu pakete aktarın.

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

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

4. Spring Boot uygulaması başlatma

Komut satırını kullanarak Spring Initializr ile yeni bir Spring Boot uygulaması oluşturarak 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 -

Initializr'ın, şablon uygulamasının pom.xml bölümündeki bağımlılıklarınıza spring-boot-starter-web ve spring-cloud-gcp-starter-storage öğelerini 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/

Maven kullanarak uygulamayı derleyin ve çalıştırın.

$ ./mvnw spring-boot:run

Uygulama, 8080 numaralı bağlantı noktasında 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 işlem yapmadığı için 404 yanıtı almanız gerekir.

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

5. Cloud Storage'daki dosyayı okuma

Daha önce Cloud Storage'da depoladığınız my-file.txt dosyasına erişmek için Spring Boot uygulamanızı değiştirin. Amacınız, dosyanın içeriğini HTTP üzerinden döndürmektir.

Aşağıdaki talimatlarda dosyaları düzenlemek için Vim'i kullanacaksınız ancak 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 ve kaynak URI'sini daha önce oluşturduğunuz paketle 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ında 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

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

6. Cloud Storage'daki dosyaya yazma

Cloud Storage'daki dosyanın içeriğini okuyup Spring REST denetleyicisi aracılığıyla kullanıma sundunuz. Şimdi, yeni dosya içeriğini aynı HTTP uç noktasına yayınlayarak dosyanın içeriğini değiştirin.

GcsController'ya, HTTP POST'a yanıt verecek ve verileri Cloud Storage'daki dosyanıza yazacak başka bir yöntem eklemeniz gerekir. Bu kez, Spring Resource'i WritableResource'e yayınlayın.

GcsController dosyasını ihtiyacınız olan ek içe aktarma işlemleriyle 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;

Yeni uç nokta yöntemini denetleyiciye 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ında dinlemeye başlar. Yeni bir Cloud Shell sekmesi açın ve uygulamaya mesaj göndermek 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ğine dair bir onay mesajı 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örmeniz gerekir. 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 soyutlamasını kullanmayı öğrendiniz. Cloud Storage'daki bir dosyayı okuyup yazabilen bir Spring Boot web uygulaması yazdınız. Ayrıca bu işlevselliği sağlayan Cloud Storage için Spring Boot başlatıcısı hakkında 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.