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
İhtiyacınız olanlar
Bu eğiticiden nasıl yararlanacaksınız?
Google Cloud Platform hizmetlerinin kullanımıyla ilgili deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.
- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğinizi (genellikle
PROJECT_ID
olarak tanımlanır) belirtmeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz olması açısından, bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmanın tekrarlanmasını önlemek amacıyla kaynakları kapatmak için oluşturduğunuz kaynakları silebilir veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Cloud Shell'i etkinleştirme
- Cloud Console'da, Cloud Shell'i etkinleştir simgesini tıklayın.
Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara bir ekran görüntülendiyse Devam'ı tıklayın.
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
Gereken tüm geliştirme araçları bu sanal makinede yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı tarayıcıyla yapılabilir.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını göreceksiniz.
- Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki 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 komutunun projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. Cloud Datastore'u ilk kullanıma hazırlama
GCP Console'da Menü -> Datastore'u (Depolama bölümünde) seçin veya burayı tıklayın.
Geçerli projede hiç Datastore'u kullanmadıysanız "Cloud Firestore modu seçin" ekranını görürsünüz. "Datastore modu" seçeneğini belirleyin.
Sonrasında, "Verilerinizin depolanacağı yeri seçin" ekranını görürsünüz. us-east1 veya başka bir bölgesel konumu seçip "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ını başlatmak ve önyüklemek için aşağıdaki komutu kullanın:
$ curl https://start.spring.io/starter.tgz \ -d packaging=war \ -d dependencies=cloud-gcp \ -d type=maven-project \ -d baseDir=datastore-example \ -d bootVersion=3.0.5 | tar -xzvf -
Bu işlem yeni bir Maven projesiyle birlikte yeni bir datastore-example/
dizininin yanı sıra Maven'in pom.xml
dizini, bir Maven sarmalayıcı ve bir uygulama giriş noktası oluşturur.
Uygulamamız, kullanıcıların komutları girmesi ve sonuçları görmesi için bir KSA sağlar. Kitabı temsil edecek bir sınıf oluşturup Datastore Deposunu kullanarak kitabı Cloud Datastore'a kaydedeceğiz.
pom.xml
öğesine gerekli bir bağımlılık daha eklememiz gerekiyor.
Cloud Shell menüsünden Düzenleyiciyi aç'ı tıklayarak Web Kodu Düzenleyici'yi açın.
Düzenleyici yüklendikten sonra pom.xml
dosyasını değiştirerek Google Cloud Datastore Starter ve Spring Shell Starter bağımlılıklarını ekleyin:
pom.xml
<project>
...
<dependencies>
...
<!-- Add GCP Datastore Starter -->
<dependency>
<groupId>com.google.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>3.0.2</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 com.google.cloud.spring.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ıfa, Datastore'da depolanabileceğini belirtmek ve tür adını vermek için @Entity
ile ek açıklama verilir (SQL veritabanlarında bir türü düşünün (daha fazla bilgi için belgelere bakın). Tür adı isteğe bağlıdır. Tür adı atlanırsa tür adı sınıf adına göre oluşturulur.
id
özelliğine @Id
ile ek açıklama eklediğimizi unutmayın. Bu, bu alanın Datastore Anahtarı'nın tanımlayıcı bölümü olarak kullanılmasını istediğimizi gösterir. Her Datastore varlığı için bir tanımlayıcı gerekir. Desteklenen türler: String
ve Long
.
Nesnelerin dize gösterimini daha okunabilir hale getirmek için toString
yöntemini geçersiz kılarız; bu yararlı olacaktır.
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 com.google.cloud.spring.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>
öğesini genişletir. Book
alan adı sınıfı, Long
ise Id
türüdür. Depomuzda, uygulamaların arka planda otomatik olarak oluşturulduğu üç sorgu yöntemi tanımlıyoruz.
İlki findByAuthor
. Tahmin edebileceğiniz gibi, bu yöntemin uygulanması, yazara eşitlik alanında koşul filtresinde kullanıcı tarafından sağlanan değeri kullanacak bir sorgu yürütür.
findByYearGreaterThan
yöntemi, kullanıcı tarafından sağlanan değerden büyük yıl alanını filtreleyen bir sorgu yürütür.
findByAuthorAndYear
, yazar ve yıl alanlarının kullanıcı tarafından sağlanan değerlerle eşleştiği varlıkları arayan bir sorgu yürütür.
7. Etkileşimli CLI uygulamasını oluşturma
Ana uygulama DemoApplication
sınıfını açın ve aşağıdaki gibi görünecek şekilde 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();
}
}
@ShellComponent
ile sınıfa nasıl not eklediğimize dikkat edin. Bu bilgi, Spring'e bu sınıfı CLI komutları için bir kaynak olarak kullanmak istediğimizi bildirir. @ShellMethod
ile açıklama eklenen yöntemler, uygulamamızda CLI komutları olarak gösterilir.
Burada, BookRepository
arayüzünde beyan ettiğimiz yöntemleri kullanırız: findByAuthor
, findByYearGreaterThan
, findByAuthorAndYear
. Ayrıca üç yerleşik yöntem kullanırız: save
, findAll
ve deleteAll
.
saveBook
yöntemine bakalım. Başlık, yazar ve yıl için kullanıcıların sağladığı değerleri kullanarak bir Book
nesnesi oluştururuz. Gördüğünüz gibi id
değeri sağlamıyoruz. Bu nedenle, kayıt sırasında değer otomatik olarak ayrılıp id
alanına atanır. save
yöntemi, Book
türünde bir nesne kabul eder ve bunu Cloud Datastore'a kaydeder. id
alanı dahil tüm alanlar doldurulmuş bir Book
nesnesi döndürür. Sonunda, bu nesnenin dize temsilini döndürürüz.
Geri kalan yöntemler de benzer şekilde çalışır: Bunlar, uygun depo yöntemlerine iletilen parametreleri kabul eder ve dizeleştirilmiş sonuçlar döndürür.
8. Uygulamayı çalıştırın
Uygulamayı oluşturmak ve başlatmak için öncelikle JAVA_HOME'un doğru sürüme ayarlandığından emin olun:
$ export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64
Bu komutu Cloud Shell'de yürütün (pom.xml
öğesinin bulunduğu datastore-example/
projesinin kökünden):
$ ./mvnw spring-boot:run export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64
Başarılı bir derleme aşamasından sonra ilkbahar logosu ve kabuk istemi görünür:
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.0.5) shell:>
Artık daha önce tanımladığımız komutlarla 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 yazarlara göre kitaplar bulun:
find-by-author <author>
- Belirli bir yıldan sonra yayınlanan kitapları bulun:
find-by-year-after <year>
- Belirli bir yazara ve yıla göre kitap bulun:
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. "books" girin tür alanına yazın.
10. Temizleme
Temizlemek için uygun şekilde 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
komutunu kullanın.
11. Tebrikler!
Bu codelab'de, Cloud Datastore'dan nesne depolayıp alabilen etkileşimli bir CLI uygulaması oluşturdunuz.
Daha Fazla Bilgi
- Cloud Datastore: https://cloud.google.com/datastore/
- Spring Shell: https://projects.spring.io/spring-shell/
- GCP projesinde ilkbahar: https://spring.io/projects/spring-cloud-gcp
- Spring'de GCP GitHub deposu: https://github.com/GoogleCloudPlatform/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.