Cloud Datastore için Spring Boot uygulaması

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

  • Bir Google Cloud Platform Projesi
  • Chrome veya Firefox gibi bir Tarayıcı

Bu eğitimi nasıl kullanacaksınız?

Sadece okuyun Okuyun ve alıştırmaları tamamlayın

Google Cloud Platform 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.

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].

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. &quotVeri 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:

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>

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!

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.

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.

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:

  1. save-book komutunu kullanarak birkaç kitap oluşturun
  2. find-all-books komutunu kullanarak arama yapın
  3. Belirli bir yazara (find-by-author <author>) ait kitapları bulun
  4. Belirli bir yıldan sonra yayınlanan kitapları bulun (find-by-year-after <year>)
  5. Belirli bir yazara ve yıla göre kitap bulma (find-by-author-year <author> <year>)

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 "&gt,[varsayılan]" ve ad alanı ile kitap türü seçin).

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.

Bu codelab'de, Cloud Datastore'dan nesne depolayabilecek ve alabilecek bir etkileşimli CLI uygulaması oluşturdunuz.

Daha Fazla Bilgi

Lisans

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