1. Ringkasan
Google Cloud Datastore adalah database dokumen NoSQL yang dibangun 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
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud Platform?
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Mengaktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell .
Jika ini pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Lanjutkan.
Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.
Mesin virtual ini dimuat dengan semua alat pengembangan yang dibutuhkan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan dengan browser.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda telah diautentikasi dan project sudah ditetapkan ke project ID Anda.
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
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) atau klik di sini.
Jika belum pernah menggunakan Datastore dalam project saat ini, Anda akan melihat layar "Pilih mode Cloud Firestore". Pilih opsi "Mode Datastore".
Setelah itu, Anda akan melihat layar "Pilih tempat untuk menyimpan data". Pilih us-east1 atau lokasi regional lainnya dan klik "Buat Database":
4. Melakukan bootstrap pada Aplikasi Java Spring Boot baru
Dari lingkungan CloudShell, gunakan perintah berikut untuk menginisialisasi dan mem-bootstrap aplikasi Spring Boot baru:
$ 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 -
Tindakan ini akan membuat direktori datastore-example/
baru dengan project Maven baru, beserta pom.xml
Maven, wrapper Maven, dan titik entri aplikasi.
Aplikasi kita akan menyediakan CLI bagi pengguna untuk memasukkan perintah dan melihat hasilnya. Kita akan membuat class untuk mewakili buku, kemudian akan menyimpannya ke Cloud Datastore menggunakan Repositori Datastore.
Kita juga perlu menambahkan satu dependensi lagi yang diperlukan ke pom.xml
.
Buka Web Code Editor dengan mengklik Open editor dari menu Cloud Shell.
Setelah editor dimuat, ubah file pom.xml
untuk menambahkan dependensi Google Cloud Datastore Starter dan Spring Shell Starter:
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. Membuat kelas Buku
Dengan menggunakan editor, buat class Book
dengan konten berikut:
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 +
'}';
}
}
Seperti yang Anda lihat, ini adalah POJO sederhana. Class ini dianotasi dengan @Entity
untuk menunjukkan bahwa class dapat disimpan di Datastore dan memberikan nama jenisnya (misalnya jenis tabel dalam database SQL, lihat dokumentasi untuk detail selengkapnya). Nama jenis bersifat opsional - jika dihilangkan, nama jenis akan dibuat berdasarkan nama class.
Perhatikan bahwa kita menganotasi properti id
dengan @Id
. Hal ini 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.
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 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);
}
Antarmuka memperluas DatastoreRepository<Book, Long>
dengan Book
sebagai class domain dan Long
adalah jenis Id
. Kami mendeklarasikan tiga metode kueri di repositori kami yang implementasinya dibuat secara otomatis di balik layar.
Yang pertama adalah findByAuthor
. Seperti yang bisa Anda duga, implementasi metode ini akan mengeksekusi kueri yang akan menggunakan nilai yang disediakan pengguna di filter kondisi untuk kesetaraan dengan penulis.
Metode findByYearGreaterThan
menjalankan kueri yang memfilter kolom tahun lebih besar dari nilai yang diberikan pengguna.
findByAuthorAndYear
menjalankan kueri yang mencari entity dengan kolom penulis dan tahun yang cocok dengan nilai yang diberikan pengguna.
7. Membuat aplikasi CLI interaktif
Buka class DemoApplication
aplikasi utama 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 kami menganotasi 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 diekspos sebagai perintah CLI di aplikasi kita.
Di sini kita menggunakan metode yang kita deklarasikan di antarmuka BookRepository
: findByAuthor
, findByYearGreaterThan
, findByAuthorAndYear
. Kita juga menggunakan tiga metode bawaan: save
, findAll
, dan deleteAll
.
Mari kita lihat metode saveBook
. Kita membuat objek Book
menggunakan nilai yang disediakan pengguna untuk judul, penulis, dan tahun. Seperti yang Anda lihat, kami tidak memberikan nilai id
, sehingga nilai tersebut akan otomatis dialokasikan dan ditetapkan ke kolom id
saat disimpan. Metode save
menerima objek dari jenis Book
dan menyimpannya ke Cloud Datastore. Metode ini menampilkan objek Book
dengan semua kolom yang terisi, termasuk kolom id
. Pada akhirnya, kita menampilkan representasi string dari objek ini.
Metode lainnya berfungsi serupa: metode tersebut menerima parameter yang diteruskan ke metode repositori yang sesuai dan menampilkan hasil string.
8. Menjalankan aplikasi
Untuk membangun dan memulai aplikasi, pertama-tama, pastikan JAVA_HOME disetel ke versi yang tepat:
$ export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64
Jalankan perintah ini di Cloud Shell (dari root project datastore-example/
tempat pom.xml
berada):
$ ./mvnw spring-boot:run export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64
Setelah tahap build berhasil, logo pegas akan muncul dan perintah shell akan muncul:
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.0.5) shell:>
Sekarang Anda dapat bereksperimen dengan perintah yang telah kita tentukan 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>
Coba langkah berikut untuk mengatasinya:
- Buat beberapa buku menggunakan perintah
save-book
- Menjalankan penelusuran menggunakan perintah
find-all-books
- Cari buku menurut penulis tertentu:
find-by-author <author>
- Cari buku yang dipublikasikan setelah tahun tertentu:
find-by-year-after <year>
- Cari buku berdasarkan penulis dan tahun tertentu:
find-by-author-year <author> <year>
9. Melihat apa yang disimpan di Datastore menggunakan antarmuka web
Untuk melihat bagaimana entity disimpan di Cloud Datastore, buka GCP Console. Masukkan "buku" di bidang jenis, jika diperlukan.
10. Pembersihan
Untuk membersihkan, hapus semua buku menggunakan perintah remove-all-books
yang diberi nama dengan tepat dari shell aplikasi.
shell:> remove-all-books
Untuk keluar dari aplikasi, gunakan perintah berhenti, 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
- Cloud Datastore: https://cloud.google.com/datastore/
- Spring Shell: https://projects.spring.io/spring-shell/
- Project musim semi di GCP: https://spring.io/projects/spring-cloud-gcp
- Repositori GitHub Spring di GCP: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- Java di Google Cloud Platform: https://cloud.google.com/java/
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.