Bu codelab hakkında
1. Genel bakış
Google Cloud Datastore; otomatik ölçeklendirme, yüksek performans ve uygulama geliştirme kolaylığı için oluşturulmuş NoSQL belge veritabanıdır.
Neler öğreneceksiniz?
- Spring Boot'ta java nesnelerini kaydetmek ve almak için Cloud Datastore'u kullanma
Gerekenler
Bu eğitimi nasıl kullanacaksınız?
Google Cloud Platform hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
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:
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.
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].
3. Cloud Datastore'u başlatma
GCP Console'da Menu -> Datastore (Depolama bölümü) bölümüne gidin.
Geçerli projede Datastore'u hiç kullanmadıysanız "Cloud Firestore modu seçin" ekranını görürsünüz. "Veri deposu modu seçeneğini belirleyin.
Ardından, "Verilerinizin nerede depolanacağını seçin" ekranını görürsünüz. us-east1 veya başka bir bölgesel konumu seçin ve "Veritabanı Oluştur"u tıklayın:
4. Yeni bir Spring Boot Java Uygulamasının önyüklemesini yapın
CloudShell ortamında, yeni bir Spring Boot uygulaması başlatmak ve başlatmak için aşağıdaki komutu kullanın:
$ curl https://start.spring.io/starter.tgz \ -d packaging=war \ -d dependencies=cloud-gcp \ -d baseDir=datastore-example \ -d bootVersion=2.1.1.RELEASE | tar -xzvf -
Bu işlem, yeni Maven projesiyle birlikte yeni bir datastore-example/
dizini, ayrıca Maven's pom.xml
, Maven sarmalayıcı ve uygulama giriş noktası oluşturur.
Uygulamamız, kullanıcıların komut girmesi ve sonuçları görmesi için bir KSA sağlayacaktır. Bir kitabı temsil edecek bir sınıf oluşturur ve ardından Datastore Repository'yi kullanarak Cloud Datastore'a kaydederiz.
pom.xml
için gereken bir bağımlılığı daha eklememiz gerekiyor.
Cloud Shell menüsünden Kod düzenleyiciyi başlat'ı tıklayarak Web Kodu Düzenleyici'yi açın.
Düzenleyici yüklendikten sonra Spring Data Cloud Datastore Spring Boot Starter bağımlılığını eklemek için pom.xml
dosyasını değiştirin:
pom.xml
<project>
...
<dependencies>
...
<!-- Add GCP Datastore Starter -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
</dependency>
<!-- Add Spring Shell Starter -->
<dependency>
<groupId>org.springframework.shell</groupId>
<artifactId>spring-shell-starter</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
</dependencies>
</project>
5. Kitap sınıfını oluşturma
Düzenleyiciyi kullanarak aşağıdaki içerikle Book
sınıfını oluşturun:
datastore-example/src/main/java/com/example/demo/Book.java
package com.example.demo;
import org.springframework.cloud.gcp.data.datastore.core.mapping.Entity;
import org.springframework.data.annotation.Id;
@Entity(name = "books")
public class Book {
@Id
Long id;
String title;
String author;
int year;
public Book(String title, String author, int year) {
this.title = title;
this.author = author;
this.year = year;
}
public long getId() {
return this.id;
}
@Override
public String toString() {
return "Book{" +
"id=" + this.id +
", title='" + this.title + '\'' +
", author='" + this.author + '\'' +
", year=" + this.year +
'}';
}
}
Gördüğünüz gibi bu basit bir POJO. Sınıf, Datastore'da depolanabileceğini belirtmek ve tür adı sağlamak için @Entity
şeklinde bir ek açıklamayla belirtilir (bir türü SQL veritabanlarındaki bir tablo olarak düşünün, daha fazla ayrıntı için belgelere bakın). Tür adı isteğe bağlıdır. Atlanırsa tür adı sınıf adına göre oluşturulur.
id
mülküne @Id
ile ek açıklama eklediğimizi unutmayın. Bu, bu alanın Datastore Key'in tanımlayıcı bölümü olarak kullanılmasını istediğimiz anlamına gelir. Her Datastore varlığı için tanımlayıcı gerekir. String
ve Long
türleri desteklenir.
Nesnelerin dize gösterimini daha okunabilir hale getirmek için toString
yöntemini geçersiz kılarız. Bu yöntem, nesneleri yazdırdığımızda yararlı olur.
Dosyayı kaydetmeyi unutmayın!
6. BookRepository arayüzünü oluşturma
Aşağıdaki içerikle BookRepository
sınıfını oluşturun:
datastore-example/src/main/java/com/example/demo/BookRepository.java
package com.example.demo;
import java.util.List;
import org.springframework.cloud.gcp.data.datastore.repository.DatastoreRepository;
public interface BookRepository extends DatastoreRepository<Book, Long> {
List<Book> findByAuthor(String author);
List<Book> findByYearGreaterThan(int year);
List<Book> findByAuthorAndYear(String author, int year);
}
Arayüz DatastoreRepository<Book, Long>
(Book
alan sınıfı", Long
"Id
" türüdür. Depomuzda, uygulamaların arka planda otomatik olarak oluşturulduğu üç sorgu yöntemi bildiriyoruz.
İlki findByAuthor
. Tahmin edebileceğiniz gibi, bu yöntemin uygulanması, yazar olarak eşitlik için koşul filtresinde kullanıcı tarafından sağlanan değeri kullanacak bir sorgu yürütür.
findByYearGreaterThan
yöntemi, yıl için filtrelenen ve kullanıcı tarafından sağlanan değerden daha büyük bir sorgu yürütür.
findByAuthorAndYear
, yazar ve yıl alanlarının kullanıcı tarafından sağlanan değerlerle eşleşen varlıkları arayan bir sorgu yürütür.
7. Etkileşimli KSA uygulamasını oluşturma
Ana uygulama DemoApplication
sınıfını açın ve görünümü aşağıdaki gibi değiştirin:
datastore-example/src/main/java/com/example/demo/DemoApplication.java
package com.example.demo;
import java.util.List;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;
@ShellComponent
@SpringBootApplication
public class DemoApplication {
@Autowired
BookRepository bookRepository;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@ShellMethod("Saves a book to Cloud Datastore: save-book <title> <author> <year>")
public String saveBook(String title, String author, int year) {
Book savedBook = this.bookRepository.save(new Book(title, author, year));
return savedBook.toString();
}
@ShellMethod("Loads all books")
public String findAllBooks() {
Iterable<Book> books = this.bookRepository.findAll();
return Lists.newArrayList(books).toString();
}
@ShellMethod("Loads books by author: find-by-author <author>")
public String findByAuthor(String author) {
List<Book> books = this.bookRepository.findByAuthor(author);
return books.toString();
}
@ShellMethod("Loads books published after a given year: find-by-year-after <year>")
public String findByYearAfter(int year) {
List<Book> books = this.bookRepository.findByYearGreaterThan(year);
return books.toString();
}
@ShellMethod("Loads books by author and year: find-by-author-year <author> <year>")
public String findByAuthorYear(String author, int year) {
List<Book> books = this.bookRepository.findByAuthorAndYear(author, year);
return books.toString();
}
@ShellMethod("Removes all books")
public void removeAllBooks() {
this.bookRepository.deleteAll();
}
}
Sınıfa @ShellComponent
ile nasıl ek açıklama eklediğimize dikkat edin. Böylece Spring'e bu sınıfı KSA komutlarının kaynağı olarak kullanmak istediğimiz bildirilir. @ShellMethod
ile ek açıklamalı yöntemler uygulamamızda KSA komutları olarak gösterilir.
Burada, BookRepository arayüzünde bildirdiğimiz yöntemleri kullanıyoruz: findByAuthor
, findByYearGreaterThan
, findByAuthorAndYear
. Ayrıca üç yerleşik yöntem kullanıyoruz: save
, findAll
ve deleteAll
.
saveBook
yöntemine bakalım. Başlık, yazar ve yıl için kullanıcı tarafından sağlanan değerleri kullanarak bir Book
nesnesi oluştururuz. Gördüğünüz gibi bir id
değeri sağlamadığımız için kayıt sırasında otomatik olarak kimlik alanına ayrılacak ve kimlik alanına atanacak. save
yöntemi, Book
türünde bir nesneyi kabul eder ve Cloud Datastore'a kaydeder. id
alanı dahil tüm alanların doldurulduğu bir Book
nesnesi döndürür. Sonunda, bu nesnenin dize temsilini döndürürüz.
Geri kalan yöntemlerle de benzer şekilde çalışırlar: Parametreler uygun kod deposu yöntemlerine aktarılarak kabul edilir ve birleştirilmiş sonuçlar döndürülür.
8. Uygulamayı çalıştırın
Uygulamayı oluşturmak ve başlatmak için Cloud Shell'de şu komutu çalıştırın (pom.xml
dosyasının bulunduğu datastore-example/
projesinin kök dizininden) :
$ mvn spring-boot:run
Başarılı bir derleme aşamasının ardından, bahar logosu görünür ve kabuk istemi görüntülenir:
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.1.RELEASE) shell:>
Daha önce tanımladığımız komutlarla artık deneme yapabilirsiniz. Komut listesini görmek için yardım komutunu kullanın:
shell:> help ... find-all-books: Loads all books find-by-author: Loads books by author: find-by-author <author> find-by-author-year: Loads books by author and year: find-by-author-year <author> <year> find-by-year-after: Loads books published after a given year: find-by-year-after <year> remove-all-books: Removes all books save-book: Saves a book to Cloud Datastore: save-book <title> <author> <year>
Aşağıdakileri deneyin:
save-book
komutunu kullanarak birkaç kitap oluşturunfind-all-books
komutunu kullanarak arama yapın- Belirli bir yazara (
find-by-author <author>
) ait kitapları bulun - Belirli bir yıldan sonra yayınlanan kitapları bulun (
find-by-year-after <year>
) - Belirli bir yazara ve yıla göre kitap bulma (
find-by-author-year <author> <year>
)
9. Web arayüzünü kullanarak Datastore'da nelerin depolandığını görün
Varlıkların Cloud Datastore'da nasıl depolandığını görmek için GCP Console'a gidin ve Menü -> Datastore (Depolama bölümünde) -> Varlıklar bölümüne gidin (gerekirse ">,[varsayılan]" ve ad alanı ile kitap türü seçin).
10. Temizleme
Temizlemek için, aptly adlandırılmış remove-all-books
komutunu kullanarak tüm kitapları uygulama kabuğundan kaldırın.
shell:> remove-all-books
Uygulamadan çıkmak için çıkış komutunu, ardından Ctrl+C'yi kullanın.
11. Tebrikler!
Bu codelab'de, Cloud Datastore'dan nesne depolayabilecek ve alabilecek bir etkileşimli CLI uygulaması oluşturdunuz.
Daha Fazla Bilgi
- Cloud Datastore: https://cloud.google.com/datastore/
- Spring Shell: https://projects.spring.io/spring-shell/
- GCP'de Spring projesi: http://cloud.spring.io/spring-cloud-gcp/
- GCP GitHub veri havuzunda bahar: https://github.com/spring-cloud/spring-cloud-gcp
- Google Cloud Platform'da Java: https://cloud.google.com/java/
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.