Thông tin về lớp học lập trình này
1. Tổng quan
Google Cloud Datastore là cơ sở dữ liệu tài liệu NoSQL được xây dựng để mở rộng tự động, hiệu suất cao và dễ phát triển ứng dụng.
Kiến thức bạn sẽ học được
- Cách sử dụng Cloud Datastore để lưu và truy xuất các đối tượng java trong Spring Boot
Bạn cần có
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Bạn đánh giá trải nghiệm sử dụng các dịch vụ Google Cloud Platform của mình như thế nào?
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tiến độ riêng
Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), thì bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển của Google Cloud Platform (console.cloud.google.com) và tạo một dự án mới:
Hãy ghi nhớ mã dự án, một tên duy nhất trên tất cả các dự án Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động cho bạn!). Lớp học này sẽ được gọi sau này trong lớp học lập trình này là PROJECT_ID
.
Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.
Nếu tham gia lớp học lập trình này, bạn sẽ không mất quá vài đô la, nhưng có thể sẽ hiệu quả hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để các tài nguyên đó hoạt động (xem "cleanup" ở cuối tài liệu này).
Người dùng mới của Google Cloud Platform đủ điều kiện dùng thử 300 đô la dùng thử miễn phí.
Kích hoạt Google Cloud Shell
Từ bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ trên cùng bên phải:
Sau đó nhấp vào "Start Cloud Shell":
Bạn chỉ cần dành vài phút để cấp phép và kết nối với môi trường:
Máy ảo này được tải bằng tất cả các công cụ phát triển mà bạn cần. cung cấp một thư mục gốc 5GB cố định và chạy trên Google Cloud, qua đó nâng cao đáng kể hiệu suất và khả năng xác thực mạng. Phần lớn công việc của bạn trong phòng thí nghiệm này có thể thực hiện chỉ bằng một trình duyệt hoặc Google Chromebook.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng bạn đã được xác thực và dự án này đã được đặt thành PROJECT_ID của bạn.
Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
Đầu ra lệnh
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Đầu ra lệnh
[core] project = <PROJECT_ID>
Nếu chưa, bạn có thể đặt lệnh đó bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Đầu ra lệnh
Updated property [core/project].
3. Khởi chạy Cloud Datastore
Trong Bảng điều khiển GCP, hãy chuyển đến Trình đơn –> Kho dữ liệu (trong phần Bộ nhớ).
Nếu chưa từng sử dụng Datastore trong dự án hiện tại, bạn sẽ thấy màn hình "Select a Cloud Firestore mode". Chọn tùy chọn "Datastore mode".
Sau đó, bạn sẽ thấy màn hình "Chọn nơi lưu trữ dữ liệu". Chọn us-east1 hoặc bất kỳ vị trí khu vực nào khác và nhấp vào "Create Database":
4. Khởi động ứng dụng Java mới dành cho Spring Boot
Từ môi trường CloudShell, hãy sử dụng lệnh sau để khởi chạy và khởi động một ứng dụng Spring Boot mới:
$ 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 -
Thao tác này sẽ tạo một thư mục datastore-example/
mới có một dự án Maven mới, cùng với pom.xml
\39;s Maven, một trình bao bọc Maven cũng như một điểm truy cập cho ứng dụng.
Ứng dụng của chúng tôi sẽ cung cấp CLI cho người dùng để nhập lệnh và xem kết quả. Chúng ta sẽ tạo một lớp để đại diện cho một cuốn sách, sau đó lưu lớp đó đó vào Cloud Datastore bằng cách sử dụng Kho lưu trữ dữ liệu.
Chúng ta cũng cần thêm một phần phụ thuộc cần thiết khác vào pom.xml
.
Mở Trình chỉnh sửa mã web bằng cách nhấp vào Khởi chạy trình chỉnh sửa mã từ trình đơn Cloud Shell.
Sau khi trình chỉnh sửa tải, hãy sửa đổi tệp pom.xml
để thêm phần phụ thuộc vào Bộ khởi động mùa xuân của kho dữ liệu đám mây của Data Data:
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. Tạo lớp học trong Sách
Sử dụng trình chỉnh sửa, tạo lớp Book
có nội dung sau:
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 +
'}';
}
}
Như bạn có thể thấy, đây là một POJO đơn giản. Lớp này được chú thích bằng @Entity
để cho biết rằng lớp đó có thể được lưu trữ trong Datastore và cung cấp tên loại (hãy nghĩ đến một loại trong bảng trong cơ sở dữ liệu SQL, hãy xem tài liệu để biết thêm thông tin chi tiết). Tên loại là không bắt buộc – nếu tên đó bị bỏ qua, thì tên loại sẽ được tạo dựa trên tên lớp.
Xin lưu ý rằng chúng tôi đã chú thích thuộc tính id
bằng @Id
. Điều đó cho thấy rằng chúng tôi muốn trường này được sử dụng làm phần nhận dạng của Khóa dữ liệu. Mỗi thực thể Datastore cần một giá trị nhận dạng. Các loại kết quả được hỗ trợ là String
và Long
.
Chúng ta ghi đè phương thức toString
để làm cho cách biểu diễn chuỗi của đối tượng dễ đọc hơn; phương thức này sẽ hữu ích khi chúng ta in các đối tượng đó.
Đừng quên lưu tệp!
6. Tạo giao diện BookRepository
Tạo lớp BookRepository
có nội dung sau:
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);
}
Giao diện mở rộng DatastoreRepository<Book, Long>
trong đó Book
là lớp miền và Long
là loại Id
. Chúng tôi khai báo ba phương thức truy vấn trong kho lưu trữ mà những phương thức triển khai nào được tạo tự động phía sau hệ thống.
Sự kiện đầu tiên là findByAuthor
. Như bạn có thể đoán, việc triển khai phương pháp này sẽ thực thi một truy vấn sẽ sử dụng giá trị do người dùng cung cấp trong bộ lọc điều kiện cho trường bình đẳng với tác giả.
Phương thức findByYearGreaterThan
thực thi truy vấn lọc ra trường năm lớn hơn giá trị do người dùng cung cấp.
findByAuthorAndYear
thực thi truy vấn tìm các thực thể mà trong đó trường tác giả và trường năm khớp với giá trị do người dùng cung cấp.
7. Tạo ứng dụng CLI tương tác
Mở lớp ứng dụng chính DemoApplication
và sửa đổi để trông giống như sau:
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();
}
}
Hãy lưu ý cách chúng tôi chú thích lớp học bằng @ShellComponent
. Việc này thông báo cho Spring rằng chúng tôi muốn dùng lớp này làm nguồn cho các lệnh CLI. Các phương thức được chú thích bằng @ShellMethod
sẽ hiển thị dưới dạng lệnh CLI trong ứng dụng của chúng tôi.
Ở đây, chúng ta dùng các phương thức mà chúng ta đã khai báo trong giao diện BookRepository: findByAuthor
, findByYearGreaterThan
, findByAuthorAndYear
. Ngoài ra, chúng tôi sử dụng ba phương pháp tích hợp sẵn: save
, findAll
và deleteAll
.
Hãy xem phương thức saveBook
. Chúng tôi tạo đối tượng Book
bằng cách sử dụng các giá trị do người dùng cung cấp cho tiêu đề, tác giả và năm. Như bạn có thể thấy, chúng tôi không cung cấp giá trị id
nên hệ thống sẽ tự động phân bổ và gán giá trị này cho trường mã khi lưu. Phương thức save
chấp nhận đối tượng thuộc loại Book
và lưu đối tượng đó vào Cloud Datastore. Thuộc tính này sẽ trả về đối tượng Book
có tất cả các trường đã điền, kể cả trường id
. Cuối cùng, chúng ta trả về biểu diễn chuỗi của đối tượng này.
Các phương thức còn lại hoạt động tương tự nhau: chúng chấp nhận các tham số được chuyển đến các phương thức kho lưu trữ phù hợp và trả về kết quả theo chuỗi.
8. Chạy ứng dụng
Để tạo và khởi động ứng dụng, hãy thực thi lệnh này trong Cloud Shell (từ thư mục gốc của dự án datastore-example/
có pom.xml
) :
$ mvn spring-boot:run
Sau giai đoạn xây dựng thành công, biểu trưng mùa xuân sẽ hiển thị và lời nhắc giao diện sẽ xuất hiện:
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.1.RELEASE) shell:>
Giờ đây, bạn có thể thử nghiệm với các lệnh mà chúng ta đã xác định trước đó. Để xem danh sách các lệnh, hãy dùng lệnh trợ giúp:
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>
Hãy thử các cách sau:
- Tạo một vài cuốn sách bằng lệnh
save-book
- Chạy tìm kiếm bằng cách sử dụng lệnh
find-all-books
- Tìm sách của tác giả cụ thể (
find-by-author <author>
) - Tìm sách được xuất bản sau một năm cụ thể (
find-by-year-after <year>
) - Tìm sách theo tác giả và năm cụ thể (
find-by-author-year <author> <year>
)
9. Xem nội dung được lưu trữ trong Datastore bằng giao diện web
Để xem cách các thực thể được lưu trữ trong Cloud Datastore, hãy truy cập vào Bảng điều khiển GCP và chuyển đến Trình đơn -> Kho lưu trữ dữ liệu (trong phần Bộ nhớ) -> Thực thể (chọn "[default]" namespace và "books" type, nếu cần).
10. Dọn dẹp
Để dọn dẹp, hãy xoá tất cả sách bằng lệnh remove-all-books
có tên hợp lý khỏi giao diện ứng dụng.
shell:> remove-all-books
Để thoát ứng dụng, hãy sử dụng lệnh exit, sau đó nhấn Ctrl+C.
11. Xin chúc mừng!
Trong lớp học lập trình này, bạn đã tạo một ứng dụng CLI tương tác có thể lưu trữ và truy xuất các đối tượng từ Cloud Datastore!
Tìm hiểu thêm
- Kho dữ liệu đám mây: https://cloud.google.com/datastore/
- Vỏ lò xo: https://projects.Spring.io/Spring-shell/
- Dự án Spring trên GCP: http://cloud.Spring.io/Spring-cloud-gcp/
- Spring trên kho lưu trữ GitHub của GCP: https://github.com/Spring-cloud/Spring-cloud-gcp
- Java trên Google Cloud Platform: https://cloud.google.com/java/
Giấy phép
Tài liệu này được cấp phép theo Giấy phép chung Creative Commons 2.0.