1. Tổng quan
Spring Framework cung cấp bản tóm tắt ResourceLoader
để dễ dàng đọc và ghi các tệp từ nhiều nguồn, chẳng hạn như hệ thống tệp, classpath hoặc web. Bạn chỉ cần chỉ định URI cho tài nguyên bằng tiền tố giao thức đã biết. Ví dụ: để truy cập một tệp trên hệ thống tệp cục bộ, bạn sẽ chỉ định một URI như file:/data/config.yaml
.
Bạn sẽ viết một ứng dụng Spring Boot. Ứng dụng này sẽ truy cập vào các tệp được lưu trữ trong Cloud Storage bằng cách sử dụng tính năng tóm tắt tài nguyên Spring và tiền tố giao thức gs:
.
Bạn sẽ thực hiện việc này bằng cách sử dụng Cloud Shell và công cụ dòng lệnh gcloud của Cloud SDK.
Kiến thức bạn sẽ học được
- Cách sử dụng điều kiện khởi động Cloud Storage Spring Boot
- Cách truy cập vào các tệp trong Cloud Storage bằng Spring
- Cách sử dụng đối tượng trừu tượng
Resource
vàWritableResource
của Spring
Bạn cần có
- Một dự án trên Google Cloud
- Một trình duyệt, chẳng hạn như Google Chrome
- Quen thuộc với các trình chỉnh sửa văn bản tiêu chuẩn của Linux, chẳng hạn như Vim, Emacs và GNU Nano
Bạn sẽ sử dụng lớp học lập trình này như thế nào?
Bạn đánh giá thế nào về kinh nghiệm xây dựng ứng dụng web HTML và CSS?
Bạn đánh giá thế nào về trải nghiệm sử dụng các dịch vụ của Google Cloud?
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. (Nếu chưa có tài khoản Gmail hoặc G Suite, bạn phải tạo một tài khoản.)
Xin lưu ý rằng mã dự án là một tên riêng biệt trong tất cả dự án Google Cloud (tên ở trên đã được sử dụng nên sẽ không phù hợp với bạn!). Lớp này sẽ được đề cập sau 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.
Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" sẽ tư vấn cho bạn cách tắt tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Cloud Shell
Bạn sẽ dùng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud.
Kích hoạt Cloud Shell
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell .
Nếu trước đây chưa từng khởi động Cloud Shell, bạn sẽ được trình bày một màn hình trung gian (dưới màn hình đầu tiên) mô tả về ứng dụng này. Nếu trường hợp đó xảy ra, hãy nhấp vào Tiếp tục (và bạn sẽ không thấy thông báo đó nữa). Màn hình một lần đó sẽ có dạng như sau:
Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.
Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Dịch vụ này cung cấp thư mục gốc 5 GB ổn định và chạy trong Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Trong lớp học lập trình này, đa số mọi người đều có thể thực hiện chỉ bằng một trình duyệt hoặc Chromebook.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án đã được đặt thành mã dự á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
Kết quả lệnh
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Kết quả lệnh
[core] project = <PROJECT_ID>
Nếu chưa, bạn có thể thiết lập chế độ này bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Kết quả lệnh
Updated property [core/project].
3. Tạo tệp trong Cloud Storage
Sau khi Cloud Shell chạy, bạn có thể bắt đầu tạo tệp và chuyển các tệp đó sang Cloud Storage.
Tạo một tệp có tên my-file.txt
:
$ echo "Hello World from GCS" > my-file.txt
Sau đó, hãy tạo một bộ chứa mới, riêng biệt trong Cloud Storage rồi chuyển tệp đến bộ chứa đó bằng gsutil
.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
Chuyển đến trình duyệt bộ nhớ trong Cloud Storage và xác minh rằng bộ chứa và tệp đều có ở đó.
4. Khởi chạy ứng dụng Spring Boot
Bắt đầu viết ứng dụng bằng cách dùng dòng lệnh để tạo một ứng dụng mới có tên Spring Boot bằng Spring Boot:
$ curl https://start.spring.io/starter.tgz \ -d type=maven-project \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
Lưu ý rằng Trình khởi tạo sẽ tự động thêm spring-boot-starter-web
và spring-cloud-gcp-starter-storage
vào các phần phụ thuộc của bạn trong pom.xml
của ứng dụng mẫu.
Thay đổi thư mục của ứng dụng mẫu:
$ cd spring-gcs
Hãy đảm bảo bạn đặt JAVA_HOME
thành đúng phiên bản JDK:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Tạo bản dựng và chạy ứng dụng bằng Maven.
$ ./mvnw spring-boot:run
Ứng dụng sẽ bắt đầu nghe trên cổng 8080. Mở một thẻ Cloud Shell mới rồi chạy curl
để truy cập vào ứng dụng.
$ curl localhost:8080
Bạn sẽ nhận được phản hồi 404 vì ứng dụng này chưa thực hiện được thao tác hữu ích nào.
Quay lại thẻ Cloud Shell trước đó, nơi ứng dụng đang chạy và tắt bằng Control+C
(Command+C
trên Macintosh).
5. Đọc tệp trong Cloud Storage
Sửa đổi ứng dụng Spring Boot để truy cập vào my-file.txt
, tệp mà trước đây bạn đã lưu trữ trong Cloud Storage. Mục tiêu của bạn chỉ là trả về nội dung của tệp qua HTTP.
Trong các hướng dẫn sau, bạn sẽ sử dụng Vim để chỉnh sửa các tệp. Tuy nhiên, bạn cũng có thể sử dụng Emacs, GNU Nano hoặc trình soạn thảo mã tích hợp sẵn trong Cloud Shell:
$ cd ~/spring-gcs
Thêm trình điều khiển REST GcsController
vào ứng dụng.
$ vi src/main/java/com/example/demo/GcsController.java
Dán mã sau và đừng quên sửa URI tài nguyên bằng bộ chứa bạn đã tạo trước đó. Bạn có thể kiểm tra bộ chứa bằng cách chạy lệnh echo $BUCKET
.
src/main/java/com/example/demo/GcsController.java
package com.example.demo;
import java.io.IOException;
import java.nio.charset.Charset;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GcsController {
@Value("gs://REPLACE_WITH_YOUR_BUCKET/my-file.txt")
private Resource gcsFile;
@GetMapping("/")
public String readGcsFile() throws IOException {
return StreamUtils.copyToString(
gcsFile.getInputStream(),
Charset.defaultCharset());
}
}
Tạo và chạy ứng dụng bằng Maven:
$ ./mvnw spring-boot:run
Ứng dụng bắt đầu nghe trên cổng 8080. Mở một thẻ Cloud Shell mới rồi chạy curl
để truy cập vào ứng dụng.
$ curl localhost:8080
Bây giờ, bạn sẽ thấy nội dung của tệp được trả về từ ứng dụng. Chuyển đến thẻ Cloud Shell trước nơi ứng dụng đang chạy và loại bỏ ứng dụng đó bằng Control+C
(Command+C
trên Macintosh).
6. Ghi vào tệp trong Cloud Storage
Bạn đọc nội dung của tệp trong Cloud Storage và hiển thị tệp thông qua trình điều khiển Spring REST. Bây giờ, hãy thay đổi nội dung của tệp bằng cách đăng nội dung tệp mới lên cùng một điểm cuối HTTP.
Bạn cần thêm một phương thức khác vào GcsController
để phản hồi yêu cầu POST qua HTTP và ghi dữ liệu vào tệp trong Cloud Storage. Lần này, hãy truyền Resource
của Spring đến WritableResource
.
Cập nhật GcsController
với các lệnh nhập bổ sung mà bạn cần.
src/main/java/com/example/demo/GcsController.java
import java.io.OutputStream;
import org.springframework.core.io.WritableResource;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PostMapping;
Thêm phương thức điểm cuối mới vào bộ điều khiển.
src/main/java/com/example/demo/GcsController.java
@RestController
public class GcsController {
@PostMapping("/")
String writeGcs(@RequestBody String data) throws IOException {
try (OutputStream os = ((WritableResource) gcsFile).getOutputStream()) {
os.write(data.getBytes());
}
return "file was updated\n";
}
...
}
Tạo và chạy ứng dụng bằng Maven:
$ ./mvnw spring-boot:run
Ứng dụng bắt đầu nghe trên cổng 8080. Mở một thẻ Cloud Shell mới rồi chạy curl
để đăng thông báo lên ứng dụng.
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
Bạn sẽ thấy thông báo xác nhận rằng nội dung của tệp đã được cập nhật. Tuy nhiên, hãy xác minh điều đó bằng cách thực hiện GET
.
$ curl localhost:8080
Bạn sẽ thấy nội dung cập nhật của tệp được trả về từ ứng dụng. Quay lại thẻ Cloud Shell trước đó, nơi ứng dụng đang chạy và tắt bằng Control+C
(Command+C
trên Macintosh).
7. Xin chúc mừng!
Bạn đã tìm hiểu cách sử dụng tính năng trừu tượng hoá Tài nguyên Spring để dễ dàng truy cập vào các tệp trong Cloud Storage. Bạn đã viết một ứng dụng web Spring Boot có thể đọc và ghi vào một tệp trong Cloud Storage. Bạn cũng đã tìm hiểu về điều kiện khởi động Spring Boot dành cho Cloud Storage để hỗ trợ chức năng đó.
Tìm hiểu thêm
- Bộ nhớ trên đám mây
- Spring Framework trên Google Cloud
- Kho lưu trữ Spring trên Google Cloud GitHub
- Java trên Google Cloud
Giấy phép
Tác phẩm này được cấp phép theo Giấy phép chung Ghi nhận tác giả Creative Commons 2.0.