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
ResourceveWritableResourcesoyutlamaları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?
HTML ve CSS web uygulamaları oluşturma deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve şartlar
Yönlendirmesiz ortam kurulumu
- 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.)
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.
- 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
- Cloud Console'da Cloud Shell'i etkinleştir 'i
tıklayın.
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:
Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.
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.
- 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:

$ 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
- Cloud Storage
- Google Cloud'da Spring Framework
- Google Cloud GitHub deposunda Spring
- Google Cloud'da Java
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.