1. Tổng quan
Spring Framework cung cấp một lớp trừu tượng ResourceLoader để dễ dàng đọc và ghi tệp từ nhiều nguồn, chẳng hạn như hệ thống tệp, đường dẫn lớp hoặc web. Bạn chỉ cần chỉ định URI cho tài nguyên bằng tiền tố giao thức quen thuộc. Ví dụ: để truy cập vào 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 để truy cập vào các tệp được lưu trữ trong Cloud Storage bằng cách sử dụng lớp trừu tượng Spring Resource và tiền tố giao thức gs:.
Bạn sẽ thực hiện việc đó bằng Cloud Shell và công cụ dòng lệnh Cloud SDK gcloud.
Kiến thức bạn sẽ học được
- Cách sử dụng trình khởi động Spring Boot của Cloud Storage
- Cách truy cập vào các tệp trong Cloud Storage bằng Spring
- Cách sử dụng các lớp trừu tượng
ResourcevàWritableResourcecủ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
- Nắm vững các trình chỉnh sửa văn bản Linux tiêu chuẩn, 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ề trải 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 tự học
- Đăng nhập vào Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một 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.)
Hãy nhớ mã dự án, một tên duy nhất trên tất cả các dự án của Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động đối với bạn, xin lỗi!). Mã 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 cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên của Google Cloud.
Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" để biết cách tắt các tài nguyên nhằm tránh phát sinh chi phí 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í trị giá 300 USD.
Cloud Shell
Bạn sẽ 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
- Trên Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell
.
Nếu chưa từng khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian (dưới màn hình đầu tiên) mô tả về Cloud Shell. Nếu vậy, hãy nhấp vào Tiếp tục (và bạn sẽ không bao giờ thấy màn hình đó nữa). Sau đây là giao diện của màn hình một lần đó:
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 được tải sẵn tất cả các công cụ phát triển mà bạn cần. Máy ảo này cung cấp một thư mục chính 5 GB liên tục và chạy trong Google Cloud, giúp nâng cao đáng kể hiệu suất mạng và xác thực. Bạn có thể thực hiện hầu hết, nếu không phải là tất cả, công việc trong lớp học lập trình này 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 rằng mình đã được xác thực và dự án đã được đặt thành mã dự án 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 của 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
Đầu ra của lệnh
[core] project = <PROJECT_ID>
Nếu không, bạn có thể đặt bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Đầu ra của lệnh
Updated property [core/project].
3. Tạo tệp trong Cloud Storage
Sau khi Cloud Shell khởi chạy, bạn có thể bắt đầu tạo tệp và chuyển tệp đó sang Cloud Storage.
Tạo một tệp có tên là my-file.txt:
$ echo "Hello World from GCS" > my-file.txt
Sau đó, tạo một bộ chứa duy nhất mới trong Cloud Storage và chuyển tệp vào đó 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 rồi xác minh rằng bộ chứa và tệp đó có ở đó.
4. Khởi chạy ứng dụng Spring Boot
Bắt đầu viết ứng dụng bằng cách sử dụng dòng lệnh để tạo một ứng dụng Spring Boot mới bằng Spring Initializr:
$ curl https://start.spring.io/starter.tgz \ -d type=maven-project \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
Xin lưu ý rằng Initializr 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.
Chuyển sang thư mục của ứng dụng mẫu:
$ cd spring-gcs
Đảm bảo JAVA_HOME được đặt thành phiên bản JDK chính xác:
$ 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 chưa thực hiện bất kỳ 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 ứng dụng 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à bạn đã lưu trữ trước đó trong Cloud Storage. Mục tiêu của bạn là chỉ cần trả về nội dung của tệp thông qua HTTP.
Trong hướng dẫn sau, bạn sẽ sử dụng Vim để chỉnh sửa tệp, nhưng 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 trong Cloud Shell:

$ cd ~/spring-gcs
Thêm một trình điều khiển REST GcsController vào ứng dụng.
$ vi src/main/java/com/example/demo/GcsController.java
Dán đoạn mã sau và đừng quên sửa URI tài nguyên bằng bộ chứa mà 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 bản dựng 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à tắt ứ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ị nội dung đó thông qua một trình điều khiển REST Spring. 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 vào 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 HTTP POST và ghi dữ liệu vào tệp của bạn trong Cloud Storage. Lần này, hãy truyền Spring Resource đến WritableResource.
Cập nhật GcsController bằng 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 trình đ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 bản dựng 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 một 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 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 ứng dụng bằng Control+C (Command+C trên Macintosh).
7. Xin chúc mừng!
Bạn đã học cách sử dụng lớp trừu tượng Spring Resource để 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ề trình khởi động Spring Boot cho Cloud Storage giúp bật chức năng đó.
Tìm hiểu thêm
- Cloud Storage
- 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 Ghi công theo Creative Commons 2.0 Chung.