اپلیکیشن Spring Boot با Cloud Datastore

اپلیکیشن Spring Boot با Cloud Datastore

درباره این codelab

subjectآخرین به‌روزرسانی: فوریه ۱۰, ۲۰۲۰
account_circleنویسنده: یکی از کارمندان Google

1. بررسی اجمالی

Google Cloud Datastore یک پایگاه داده اسناد NoSQL است که برای مقیاس بندی خودکار، کارایی بالا و سهولت توسعه برنامه ساخته شده است.

چیزی که یاد خواهید گرفت

  • نحوه استفاده از Cloud Datastore برای ذخیره و بازیابی اشیاء جاوا در Spring Boot

آنچه شما نیاز دارید

چگونه از این آموزش استفاده خواهید کرد؟

تجربه خود را در استفاده از خدمات پلتفرم Google Cloud چگونه ارزیابی می کنید؟

2. راه اندازی و الزامات

تنظیم محیط خود به خود

اگر قبلاً یک حساب Google (Gmail یا Google Apps) ندارید، باید یک حساب ایجاد کنید . به کنسول Google Cloud Platform ( consol.cloud.google.com ) وارد شوید و یک پروژه جدید ایجاد کنید:

اسکرین شات از 10/02/2016 12:45:26.png

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID خواهد شد.

در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در کنسول Cloud فعال کنید.

گذراندن این کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتری داشته باشید یا اگر آنها را در حال اجرا رها کنید، ممکن است بیشتر باشد (به بخش "پاکسازی" در انتهای این سند مراجعه کنید).

کاربران جدید Google Cloud Platform واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند.

Google Cloud Shell را فعال کنید

از کنسول GCP روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

سپس روی "Start Cloud Shell" کلیک کنید:

تهیه و اتصال به محیط فقط چند لحظه طول می کشد:

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را بسیار افزایش می دهد. اگر نگوییم تمام کارهای شما در این آزمایشگاه را می توان به سادگی با یک مرورگر یا Google Chromebook انجام داد.

پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی PROJECT_ID شما تنظیم شده است.

برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:

gcloud auth list

خروجی فرمان

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

خروجی فرمان

[core]
project = <PROJECT_ID>

اگر اینطور نیست، می توانید آن را با این دستور تنظیم کنید:

gcloud config set project <PROJECT_ID>

خروجی فرمان

Updated property [core/project].

3. Cloud Datastore را راه اندازی کنید

در کنسول GCP، به Menu -> Datastore (در بخش Storage) بروید.

اگر هرگز از Datastore در پروژه فعلی استفاده نکرده‌اید، صفحه «انتخاب حالت Cloud Firestore» را خواهید دید. گزینه "Datastore mode" را انتخاب کنید.

پس از آن، صفحه "انتخاب محل ذخیره داده های خود" را خواهید دید. us-east1 یا هر مکان منطقه‌ای دیگر را انتخاب کنید و روی «ایجاد پایگاه داده» کلیک کنید:

4. یک برنامه جاوا Spring Boot جدید را بوت استرپ کنید

از محیط CloudShell، از دستور زیر برای مقداردهی اولیه و بوت استرپ یک برنامه Spring Boot جدید استفاده کنید:

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

این یک دایرکتوری datastore-example/ جدید با یک پروژه Maven جدید، همراه با Maven's pom.xml ، یک پوشش Maven و همچنین یک نقطه ورودی برنامه ایجاد می کند.

برنامه ما یک CLI برای کاربران فراهم می کند تا دستورات را وارد کرده و نتایج را ببینند. ما یک کلاس برای نمایش یک کتاب ایجاد می کنیم و سپس آن را با استفاده از Datastore Repository در Cloud Datastore ذخیره می کنیم.

همچنین باید یک وابستگی ضروری دیگر به pom.xml اضافه کنیم.

با کلیک بر روی Launch code editor از منوی Cloud Shell، ویرایشگر کد وب را باز کنید.

پس از بارگیری ویرایشگر، فایل pom.xml را تغییر دهید تا وابستگی آغازگر 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. کلاس Book ایجاد کنید

با استفاده از ویرایشگر، کلاس Book را با محتوای زیر ایجاد کنید:

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

همانطور که می بینید، این یک 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 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);

}

رابط 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. برنامه را اجرا کنید

برای ساخت و شروع برنامه، این دستور را در Cloud Shell (از ریشه پروژه datastore-example/ جایی که pom.xml قرار دارد) اجرا کنید:

$ mvn spring-boot:run

پس از یک مرحله ساخت موفق، لوگوی فنری ظاهر می شود و پیام پوسته ظاهر می شود:

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


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>

موارد زیر را امتحان کنید:

  1. با استفاده از save-book چند کتاب ایجاد کنید فرمان
  2. جستجو را با استفاده از find-all-books فرمان
  3. یافتن کتاب‌های نویسنده خاص ( find-by-author <author> )
  4. یافتن کتاب‌هایی که پس از یک سال خاص منتشر شده‌اند ( find-by-year-after <year> )
  5. یافتن کتاب‌های نویسنده و سال خاص ( find-by-author-year <author> <year> )

9. ببینید چه چیزی در Datastore با استفاده از رابط وب ذخیره می شود

برای مشاهده نحوه ذخیره موجودیت‌ها در Cloud Datastore، به کنسول GCP بروید و به منو -> Datastore (در بخش ذخیره‌سازی) -> Entities (در صورت لزوم فضای نام «[پیش‌فرض]» و نوع «کتاب» را انتخاب کنید) بروید.

10. پاک کردن

برای پاکسازی، همه کتاب‌ها را با استفاده از دستور حذف همه کتاب‌ها با نام مناسب از پوسته برنامه remove-all-books .

shell:> remove-all-books

برای خروج از برنامه از دستور quit و سپس Ctrl+C استفاده کنید.

11. تبریک می گویم!

در این کد لبه، شما یک برنامه CLI تعاملی ایجاد کرده اید که می تواند اشیاء را از Cloud Datastore ذخیره و بازیابی کند!

بیشتر بدانید

مجوز

این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.