Aplikasi Spring Boot dengan Cloud Datastore

Aplikasi Spring Boot dengan Cloud Datastore

Tentang codelab ini

subjectTerakhir diperbarui Feb 10, 2020
account_circleDitulis oleh Googler

1. Ringkasan

Google Cloud Datastore adalah database dokumen NoSQL yang dibuat untuk penskalaan otomatis, performa tinggi, dan kemudahan pengembangan aplikasi.

Yang akan Anda pelajari

  • Cara menggunakan Cloud Datastore untuk menyimpan dan mengambil objek Java di Spring Boot

Yang Anda butuhkan

  • Project Google Cloud Platform
  • Browser, seperti Chrome atau Firefox

Bagaimana Anda akan menggunakan tutorial ini?

Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud Platform?

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

Jika belum memiliki Akun Google (Gmail atau Google Apps), Anda harus membuatnya. Login ke Google Cloud Platform console (console.cloud.google.com) dan buat project baru:

Screenshot dari 10-02-2016 12:45:26.png

Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID.

Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.

Menjalankan melalui codelab ini tidak akan menghabiskan biaya lebih dari beberapa dolar, tetapi bisa lebih jika Anda memutuskan untuk menggunakan lebih banyak resource atau jika Anda membiarkannya berjalan (lihat bagian "pembersihan" di akhir dokumen ini).

Pengguna baru Google Cloud Platform memenuhi syarat untuk mendapatkan uji coba gratis senilai $300.

Mengaktifkan Google Cloud Shell

Dari GCP Console, klik ikon Cloud Shell di toolbar kanan atas:

Kemudian klik "Mulai Cloud Shell":

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan:

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB, dan berjalan di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda di lab ini dapat dilakukan hanya dengan browser atau Google Chromebook.

Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke PROJECT_ID.

Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:

gcloud auth list

Output perintah

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

Output perintah

[core]
project = <PROJECT_ID>

Jika tidak, Anda dapat menyetelnya dengan perintah ini:

gcloud config set project <PROJECT_ID>

Output perintah

Updated property [core/project].

3. Melakukan inisialisasi Cloud Datastore

Di GCP Console, buka Menu -> Datastore (di bagian Penyimpanan).

Jika Anda belum pernah menggunakan Datastore dalam project saat ini, Anda akan melihat layar "Pilih mode Cloud Firestore". Pilih opsi "Datastore mode".

Setelah itu, Anda akan melihat layar "Pilih tempat untuk menyimpan data". Pilih us-east1 atau lokasi regional lainnya dan klik "Buat Database":

4. Bootstrap Aplikasi Java Spring Boot baru

Dari lingkungan CloudShell, gunakan perintah berikut untuk melakukan inisialisasi dan mem-bootstrap aplikasi Spring Boot yang baru:

$ 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 -

Tindakan ini akan membuat direktori datastore-example/ baru dengan project Maven baru, bersama dengan pom.xml Maven, wrapper Maven, serta titik entri aplikasi.

Aplikasi kami akan menyediakan CLI bagi pengguna untuk memasukkan perintah dan melihat hasilnya. Kita akan membuat class untuk mewakili buku, lalu akan menyimpannya ke Cloud Datastore menggunakan Datastore Repository.

Kita juga perlu menambahkan satu dependensi lagi yang diperlukan ke pom.xml.

Buka Editor Kode Web dengan mengklik Luncurkan editor kode dari menu Cloud Shell.

Setelah editor dimuat, ubah file pom.xml untuk menambahkan dependensi awal Spring Data Cloud Datastore Spring Boot:

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. Membuat class Buku

Dengan editor, buat class Book dengan konten berikut:

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 +
                               
'}';
       
}
}

Seperti yang dapat Anda lihat, ini adalah POJO sederhana. Class dianotasi dengan @Entity untuk menunjukkan bahwa class dapat disimpan di Datastore dan memberikan nama jenis (seperti sejenis tabel dalam database SQL, lihat dokumentasi untuk detail selengkapnya). Nama jenis bersifat opsional - jika dihilangkan, nama jenis akan dihasilkan berdasarkan nama kelas.

Perhatikan bahwa kami telah menganotasi properti id dengan @Id. Hal tersebut menunjukkan bahwa kita ingin kolom ini digunakan sebagai bagian ID dari Kunci Datastore. Setiap entity Datastore memerlukan ID. Jenis yang didukung adalah String dan Long.

Kita mengganti metode toString untuk membuat representasi string objek lebih mudah dibaca; ini akan berguna saat kita mencetaknya.

Jangan lupa untuk menyimpan file.

6. Membuat antarmuka BookRepository

Buat class BookRepository dengan konten berikut:

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);

}

Antarmuka mencakup DatastoreRepository<Book, Long> dengan Book adalah class domain dan Long adalah jenis Id. Kami mendeklarasikan tiga metode kueri di repositori yang penerapannya dibuat secara otomatis di balik layar.

Yang pertama adalah findByAuthor. Seperti yang dapat Anda tebak, penerapan metode ini akan menjalankan kueri yang akan menggunakan nilai yang diberikan pengguna dalam filter kondisi untuk kesetaraan dengan kolom penulis.

Metode findByYearGreaterThan menjalankan kueri yang memfilter kolom tahun yang lebih besar dari nilai yang diberikan pengguna.

findByAuthorAndYear menjalankan kueri yang mencari entitas jika kolom penulis dan tahun cocok dengan nilai yang diberikan pengguna.

7. Membuat aplikasi CLI interaktif

Buka class aplikasi utama DemoApplication dan ubah agar terlihat seperti ini:

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();
 
}
}

Perhatikan cara kita memberi anotasi pada class dengan @ShellComponent. Hal ini memberi tahu Spring bahwa kita ingin menggunakan class ini sebagai sumber untuk perintah CLI. Metode yang dianotasi dengan @ShellMethod akan ditampilkan sebagai perintah CLI di aplikasi kita.

Di sini kita menggunakan metode yang dideklarasikan dalam antarmuka BookRepository: findByAuthor, findByYearGreaterThan, findByAuthorAndYear. Selain itu, kami menggunakan tiga metode bawaan: save, findAll, dan deleteAll.

Mari lihat metode saveBook. Kita membuat objek Book menggunakan nilai yang diberikan pengguna untuk judul, penulis, dan tahun. Seperti yang dapat Anda lihat, kami tidak memberikan nilai id, sehingga nilai tersebut akan otomatis dialokasikan dan ditetapkan ke kolom id saat disimpan. Metode save menerima objek jenis Book dan menyimpannya ke Cloud Datastore. Tindakan ini menampilkan objek Book dengan semua kolom yang diisi, termasuk kolom id. Pada akhirnya, kita menampilkan representasi string dari objek ini.

Metode lainnya berfungsi sama: metode ini menerima penerusan parameter ke metode repositori yang sesuai dan menampilkan hasil string.

8. Menjalankan aplikasi

Untuk membuat dan memulai aplikasi, jalankan perintah ini di Cloud Shell (dari root project datastore-example/ tempat pom.xml berada) :

$ mvn spring-boot:run

Setelah tahap build berhasil, logo spring akan muncul dan perintah shell akan muncul:

 .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.1.RELEASE)


shell:> 

Sekarang Anda dapat bereksperimen dengan perintah yang telah ditentukan sebelumnya. Untuk melihat daftar perintah, gunakan perintah bantuan:

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>

Cobalah langkah berikut:

  1. Buat beberapa buku menggunakan perintah save-book
  2. Menjalankan penelusuran menggunakan perintah find-all-books
  3. Mencari buku dari pengarang tertentu (find-by-author <author>)
  4. Menemukan buku yang dipublikasikan setelah tahun tertentu (find-by-year-after <year>)
  5. Menemukan buku berdasarkan pengarang dan tahun tertentu (find-by-author-year <author> <year>)

9. Melihat apa yang disimpan di Datastore menggunakan antarmuka web

Untuk melihat cara entitas disimpan di Cloud Datastore, buka GCP Console dan buka Menu -> Datastore (di bagian Penyimpanan) -> Entitas (pilih "[default]" namespace, dan "buku" jenis, jika perlu).

10. Pembersihan

Untuk membersihkan, hapus semua buku menggunakan perintah remove-all-books yang diberi nama tepat dari shell aplikasi.

shell:> remove-all-books

Untuk keluar dari aplikasi, gunakan perintah keluar, lalu Ctrl+C.

11. Selamat!

Dalam codelab ini, Anda telah membuat aplikasi CLI interaktif yang dapat menyimpan dan mengambil objek dari Cloud Datastore.

Pelajari Lebih Lanjut

Lisensi

Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.