Spring Resource soyutlaması ile Cloud Storage'daki dosyalara erişme

Spring Çerçevesi, dosya sistemi, sınıf yolu veya web gibi çeşitli kaynaklardan dosyaları kolayca okumak ve yazmak için bir ResourceLoader soyutlaması sunar. Tek yapmanız gereken, bilinen protokol önekini kullanarak kaynağın URI'sını belirtmek. Ö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ı yazarsınız.

Cloud Shell ve Cloud SDK gcloud komut satırı aracını kullanarak bu işlemi gerçekleştirebilirsiniz.

Neler öğreneceksiniz?

  • Cloud Storage Spring Boot başlatıcı'yı kullanma
  • Spring ile Cloud Storage'daki dosyalara erişme
  • Bahar dönemi 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üzenleyicilerini kullanma

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

Salt okuma Alıştırmaları okuma ve tamamlama

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 Yetkili

Bağımsız tempolu ortam kurulumu

Google Hesabınız (Gmail veya Google Apps) yoksa bir hesap oluşturmanız gerekir. Google Cloud Platform Console'da (console.cloud.google.com) oturum açın ve yeni bir proje oluşturun:

Ekran görüntüsü: 10.02.2016 12:45:26.png

Proje kimliğini tüm Google Cloud projeleri genelinde benzersiz bir ad olarak hatırlayın (yukarıdaki ad zaten alınmıştı ve maalesef sizin için çalışmaz). Bu, daha sonra bu codelab'de PROJECT_ID olarak adlandırılacaktır.

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

Bu codelab'i gözden geçirmek için çalışmanın birkaç dolardan fazla maliyeti olmayacak. Ancak daha fazla kaynak kullanmaya karar verirseniz veya bunları çalışır durumda bırakırsanız (bu belgenin sonundaki "temizlik" bölümüne bakın) daha yüksek maliyetli olabilir.

Yeni Google Cloud Platform kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Cloud Shell

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

Google Cloud Shell'i etkinleştir

GCP Console'dan, sağ üstteki araç çubuğu üzerinde Cloud Shell simgesini tıklayın:

Ardından "Cloud Shell'i Başlat"ı tıklayın:

Ortamın temel hazırlığı ve bağlantı kurması yalnızca birkaç dakika sürer:

Bu sanal makine, ihtiyacınız olan tüm geliştirme araçları yüklüdür. 5 GB kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu laboratuvardaki çalışmalarınızın neredeyse tamamı tarayıcı veya Google Chromebook ile yapılabilir.

Cloud Shell'e bağlandıktan sonra kimliğinizin zaten doğrulanmış olduğunu ve projenin PROJECT_ID'nize ayarlanmış olduğunu görmeniz gerekir.

Kimliğinizin doğrulanmasını sağlamak için Cloud Shell'de aşağıdaki komutu çalıştırın:

gcloud auth list

Komut çıkışı

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Ayarlanmamışsa şu komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

Cloud Shell başlatıldıktan sonra, dosya oluşturup 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şturup dosyayı gsutil kullanarak buraya aktarın.

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

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

Spring Initiallir 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 dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -

İlkleştirici'nin, şablon uygulamasının pom.xml öğelerindeki bağımlılarınıza spring-boot-starter-web ve spring-cloud-gcp-starter-storage öğelerini otomatik olarak ekleyeceğini unutmayın.

Şablon uygulama dizininde değişiklik yapın:

$ cd spring-gcs

Maven'i kullanarak uygulamayı oluşturun ve çalıştırın.

$ ./mvnw spring-boot:run

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

$ curl localhost:8080

Uygulama henüz yararlı bir şey yapmadığı için 404 yanıtı almanız gerekir. Uygulamanın çalıştığı önceki Cloud Shell sekmesine dönün ve uygulamayı Control+C (Macintosh'ta Command+C) ile sonlandırın.

Spring Boot uygulamanızı daha önce Cloud Storage'da depoladığınız my-file.txt dosyasına erişecek şekilde 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 Cloud Shell'de Emacs, GNU Nano veya yerleşik kod düzenleyiciyi de kullanabilirsiniz:

$ 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'yi 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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GcsController {

  @Value("gs://REPLACE_WITH_YOUR_BUCKET/my-file.txt")
  private Resource gcsFile;

  @RequestMapping(value = "/", method = RequestMethod.GET)
  public String readGcsFile() throws IOException {
    return StreamUtils.copyToString(
        gcsFile.getInputStream(),
        Charset.defaultCharset()) + "\n";
  }
}

Uygulamayı Maven ile oluşturup çalıştırın:

$ ./mvnw spring-boot:run

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

$ curl localhost:8080

Artık dosya içeriğinin uygulamadan döndürüldüğünü göreceksiniz. Uygulamanın çalıştığı önceki Cloud Shell sekmesine gidip uygulamayı Control+C (Macintosh'ta Command+C) ile sonlandırın.

Dosyanın içeriğini Cloud Storage'da okuyor ve Spring REST denetleyicisi aracılığıyla gösteriyorsunuz. Şimdi yeni dosya içeriğini aynı HTTP uç noktasına yayınlayarak dosyanın içeriğini değiştirin.

GcsController için, HTTP POST'una yanıt verecek ve Cloud Storage'da dosyanıza veri yazacak başka bir yöntem eklemeniz gerekir. Bu kez Resource için ilkbaharı WritableResource'a yayınlayın.

İhtiyaç duyduğunuz ek içe aktarma işlemleriyle GcsController'ı 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;

Yeni uç nokta yöntemini kumandaya ekleyin.

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

@RestController
public class GcsController {
  @RequestMapping(value = "/", method = RequestMethod.POST)
  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 oluşturup ç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 uygulamada 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 mesajı görürsünüz. Ancak bir 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 uygulamayı Control+C (Macintosh'ta Command+C) ile sonlandırın.

Cloud Storage'daki dosyalara kolayca erişmek için Spring Resource soyutlamasını kullanmayı öğrendiniz. Cloud Storage'daki bir dosyayı okuyup yazabilen Spring Boot web uygulaması yazdınız. Bu işlevi etkinleştiren Cloud Storage için Spring Boot başlatıcı'yı da öğrendiniz.

Daha Fazla Bilgi

Lisans

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