1. بررسی اجمالی
Google Cloud Datastore یک پایگاه داده اسناد NoSQL است که برای مقیاس بندی خودکار، کارایی بالا و سهولت توسعه برنامه ساخته شده است.
چیزی که یاد خواهید گرفت
- نحوه استفاده از Cloud Datastore برای ذخیره و بازیابی اشیاء جاوا در Spring Boot
آنچه شما نیاز دارید
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را در استفاده از سرویسهای پلتفرم ابری Google چگونه ارزیابی میکنید؟
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورتحساب فراتر از این آموزش، میتوانید منابعی را که ایجاد کردهاید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را فعال کنید
- از Cloud Console، روی Activate Cloud Shell کلیک کنید .
اگر این اولین باری است که Cloud Shell را راه اندازی می کنید، با یک صفحه میانی روبرو می شوید که آن را توصیف می کند. اگر با یک صفحه میانی مواجه شدید، روی Continue کلیک کنید.
تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.
این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی ارائه میکند و در Google Cloud اجرا میشود، که عملکرد و احراز هویت شبکه را بسیار افزایش میدهد. بسیاری از کارهای شما، اگر نه همه، در این کد لبه با مرورگر قابل انجام است.
پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شده اید و پروژه به ID پروژه شما تنظیم شده است.
- برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:
gcloud auth list
خروجی فرمان
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد:
gcloud config list project
خروجی فرمان
[core] project = <PROJECT_ID>
اگر اینطور نیست، می توانید آن را با این دستور تنظیم کنید:
gcloud config set project <PROJECT_ID>
خروجی فرمان
Updated property [core/project].
3. Cloud Datastore را راه اندازی کنید
در GCP Console ، به منو -> Datastore (در بخش Storage) بروید یا اینجا را کلیک کنید .
اگر هرگز از Datastore در پروژه فعلی استفاده نکردهاید، صفحه «انتخاب حالت Cloud Firestore» را خواهید دید. گزینه "Datastore mode" را انتخاب کنید.
پس از آن، صفحه "انتخاب محل ذخیره داده های خود" را خواهید دید. us-east1 یا هر مکان منطقهای دیگر را انتخاب کنید و روی «ایجاد پایگاه داده» کلیک کنید:
4. یک برنامه Spring Boot Java جدید را بوت استرپ کنید
از محیط CloudShell، از دستور زیر برای مقداردهی اولیه و بوت استرپ یک برنامه Spring Boot جدید استفاده کنید:
$ 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 -
این یک دایرکتوری datastore-example/
جدید با یک پروژه Maven جدید، همراه با Maven's pom.xml
، یک پوشش Maven و یک نقطه ورودی برنامه ایجاد می کند.
برنامه ما یک CLI برای کاربران فراهم می کند تا دستورات را وارد کنند و نتایج را ببینند. ما یک کلاس برای نمایش یک کتاب ایجاد می کنیم و سپس آن را با استفاده از Datastore Repository در Cloud Datastore ذخیره می کنیم.
همچنین باید یک وابستگی ضروری دیگر به pom.xml
اضافه کنیم.
با کلیک بر روی Open editor از منوی Cloud Shell، ویرایشگر کد وب را باز کنید.
پس از بارگیری ویرایشگر، فایل pom.xml
را تغییر دهید تا وابستگیهای Google Cloud Datastore Starter و 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. کلاس Book را ایجاد کنید
با استفاده از ویرایشگر، کلاس Book
را با محتوای زیر ایجاد کنید:
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 +
'}';
}
}
همانطور که می بینید، این یک POJO ساده است. کلاس با @Entity
حاشیهنویسی میشود تا نشان دهد که میتوان آن را در Datastore ذخیره کرد و نام نوع آن را ارائه کرد (یک نوع را به عنوان جدول در پایگاههای داده SQL در نظر بگیرید، برای جزئیات بیشتر به مستندات مراجعه کنید). نوع نام اختیاری است - اگر از قلم افتاده باشد، نام نوع بر اساس نام کلاس ایجاد می شود.
توجه داشته باشید که ویژگی id
با @Id
حاشیه نویسی کردیم. این نشان می دهد که ما می خواهیم این فیلد به عنوان قسمت شناسه کلید Datastore استفاده شود. هر موجودیت Datastore به یک شناسه نیاز دارد. انواع پشتیبانی شده String
و Long
هستند.
ما متد toString
را نادیده می گیریم تا نمایش رشته اشیاء خواناتر شود. این زمانی مفید خواهد بود که آنها را چاپ کنیم.
6. رابط BookRepository را ایجاد کنید
کلاس BookRepository
را با محتوای زیر ایجاد کنید:
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);
}
رابط DatastoreRepository<Book, Long>
را گسترش می دهد که Book
کلاس دامنه و Long
نوع Id
است. ما سه روش پرس و جو را در مخزن خود اعلام می کنیم که پیاده سازی ها به صورت خودکار در پشت صحنه تولید می شوند.
اولین مورد findByAuthor
است. همانطور که می توانید حدس بزنید، اجرای این روش یک پرس و جو را اجرا می کند که از یک مقدار ارائه شده توسط کاربر در فیلتر شرط برای فیلد برابری با نویسنده استفاده می کند.
متد findByYearGreaterThan
پرس و جوی را اجرا می کند که فیلد سال را بیشتر از مقدار ارائه شده توسط کاربر فیلتر می کند.
findByAuthorAndYear
پرس و جوی را اجرا می کند که به دنبال موجودیت هایی می گردد که فیلدهای نویسنده و سال با مقادیر ارائه شده کاربر مطابقت دارند.
7. برنامه تعاملی CLI را ایجاد کنید
کلاس DemoApplication
برنامه اصلی را باز کنید و آن را به شکل زیر تغییر دهید:
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
حاشیه نویسی کردیم. این به Spring اطلاع می دهد که می خواهیم از این کلاس به عنوان منبعی برای دستورات CLI استفاده کنیم. متدهای حاشیه نویسی شده با @ShellMethod
به عنوان دستورات CLI در برنامه ما نمایش داده می شوند.
در اینجا از روشهایی که در رابط BookRepository
اعلام کردیم استفاده میکنیم: findByAuthor
، findByYearGreaterThan
، findByAuthorAndYear
. همچنین ما از سه روش داخلی استفاده می کنیم: save
، findAll
و deleteAll
.
بیایید به روش saveBook
نگاه کنیم. ما یک شی Book
با استفاده از مقادیر ارائه شده توسط کاربر برای عنوان، نویسنده و سال ایجاد می کنیم. همانطور که می بینید، ما یک مقدار id
ارائه نمی دهیم، بنابراین به طور خودکار در ذخیره به فیلد id
اختصاص داده می شود. متد save
یک شی از نوع Book
را می پذیرد و آن را در Cloud Datastore ذخیره می کند. یک شی Book
با تمام فیلدها از جمله فیلد id
پر شده برمی گرداند. در پایان یک نمایش رشته ای از این شی را برمی گردانیم.
بقیه روش ها به طور مشابه عمل می کنند: آنها پارامترهایی را به روش های مخزن مناسب می پذیرند و نتایج رشته ای را برمی گردانند.
8. برنامه را اجرا کنید
برای ساخت و راه اندازی برنامه، ابتدا مطمئن شوید که JAVA_HOME روی نسخه مناسب تنظیم شده است:
$ export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64
این دستور را در Cloud Shell (از ریشه پروژه datastore-example/
جایی که pom.xml
قرار دارد) اجرا کنید:
$ ./mvnw spring-boot:run export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64
پس از یک مرحله ساخت موفق، لوگوی فنری ظاهر می شود و پیام پوسته ظاهر می شود:
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.0.5) shell:>
اکنون می توانید با دستوراتی که قبلا تعریف کردیم آزمایش کنید. برای مشاهده لیست دستورات، از دستور help استفاده کنید:
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>
موارد زیر را امتحان کنید:
- با استفاده از دستور
save-book
چند کتاب ایجاد کنید - با استفاده از دستور
find-all-books
جستجو را اجرا کنید - یافتن کتاب های نویسنده خاص:
find-by-author <author>
- یافتن کتابهایی که پس از یک سال خاص منتشر شدهاند:
find-by-year-after <year>
- یافتن کتاب توسط نویسنده و سال خاص:
find-by-author-year <author> <year>
9. ببینید چه چیزی در Datastore با استفاده از رابط وب ذخیره می شود
برای مشاهده نحوه ذخیره موجودیت ها در Cloud Datastore، به کنسول GCP بروید. در صورت لزوم "کتاب" را در زمینه مهربانی وارد کنید.
10. پاکسازی کنید
برای پاکسازی، همه کتابها را با استفاده از دستور remove-all-books
با نام مناسب از پوسته برنامه حذف کنید.
shell:> remove-all-books
برای خروج از برنامه از دستور quit و سپس Ctrl+C
استفاده کنید.
11. تبریک!
در این کد لبه، شما یک برنامه CLI تعاملی ایجاد کرده اید که می تواند اشیاء را از Cloud Datastore ذخیره و بازیابی کند!
بیشتر بدانید
- Cloud Datastore: https://cloud.google.com/datastore/
- Spring Shell: https://projects.spring.io/spring-shell/
- پروژه Spring on GCP: https://spring.io/projects/spring-cloud-gcp
- Spring در مخزن GCP GitHub: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- جاوا در Google Cloud Platform: https://cloud.google.com/java/
مجوز
این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.