เกี่ยวกับ Codelab นี้
1 ภาพรวม
ฤดูใบไม้ผลิของ Spring Framework มีนามธรรม ResourceLoader
สําหรับการอ่านและเขียนไฟล์จากแหล่งที่มาต่างๆ เช่น ระบบไฟล์, classpath หรือเว็บ เพียงแค่ระบุ URI ไปยังทรัพยากรโดยใช้คํานําหน้าโปรโตคอลที่รู้จักกันดี เช่น หากต้องการเข้าถึงไฟล์ในระบบไฟล์ในเครื่อง คุณจะระบุ URI เช่น file:/data/config.yaml
คุณจะเขียนแอป Spring Boot ที่เข้าถึงไฟล์ที่จัดเก็บไว้ใน Cloud Storage โดยใช้นามธรรมของทรัพยากร Spring และคํานําหน้าโปรโตคอล gs:
ซึ่งจะทําได้โดยใช้ Cloud Shell และเครื่องมือบรรทัดคําสั่ง gcloud ของ Cloud SDK
สิ่งที่จะได้เรียนรู้
- วิธีใช้การเริ่มต้น Cloud Storage Spring
- วิธีเข้าถึงไฟล์ใน Cloud Storage ด้วย Spring
- วิธีใช้นามธรรม
Resource
และWritableResource
ของ Spring'
สิ่งที่ต้องมี
- โปรเจ็กต์ Google Cloud
- เบราว์เซอร์ เช่น Google Chrome
- ทําความคุ้นเคยกับเครื่องมือแก้ไขข้อความ Linux มาตรฐาน เช่น Vim, Emacs และ GNU Nano
คุณจะใช้ Codelab อย่างไร
คุณจะให้คะแนนประสบการณ์ในการสร้างเว็บแอป HTML และ CSS อย่างไร
คุณจะให้คะแนนประสบการณ์ในการใช้บริการของ Google Cloud อย่างไร
2 การตั้งค่าและข้อกําหนด
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
หากยังไม่มีบัญชี Google (Gmail หรือ Google Apps) คุณต้องสร้างบัญชี ลงชื่อเข้าใช้คอนโซล Google Cloud Platform (console.cloud.google.com) และสร้างโปรเจ็กต์ใหม่ ดังนี้
โปรดทราบว่ารหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ํากันสําหรับโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อข้างต้นมีผู้อื่นนําไปใช้แล้ว ขออภัยในความไม่สะดวก) และจะเรียกใน Codelab นี้ว่า PROJECT_ID
ในภายหลัง
จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากรของ Google Cloud
การเรียกใช้ Codelab นี้ไม่ควรมีค่าใช้จ่ายเกิน 2-3 ดอลลาร์ แต่อาจมากกว่านั้นหากคุณตัดสินใจใช้ทรัพยากรเพิ่มเติมหรือปล่อยให้ทรัพยากรทํางาน (ดู "cleanup" ในตอนท้ายของเอกสารนี้)
ผู้ใช้ใหม่ของ Google Cloud Platform มีสิทธิ์รับช่วงทดลองใช้ฟรี $300
Cloud Shell
คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคําสั่งที่ทํางานใน Google Cloud ได้
เปิดใช้งาน Google Cloud Shell
จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบน ดังนี้
จากนั้นคลิก "เริ่ม Cloud Shell"
ระบบจะใช้เวลาเพียงครู่เดียวในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม
เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหน้าแรกขนาด 5 GB ถาวรและทํางานอยู่ใน 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 Storage
หลังจากเปิดตัว Cloud Shell คุณจะเริ่มสร้างไฟล์และโอนไฟล์ไปยัง Cloud Storage ได้
สร้างไฟล์ชื่อ my-file.txt
$ echo "Hello World from GCS" > my-file.txt
จากนั้นให้สร้างที่เก็บข้อมูลที่ไม่ซ้ํากันใหม่ใน Cloud Storage และโอนไฟล์โดยใช้ gsutil
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
ไปที่เบราว์เซอร์พื้นที่เก็บข้อมูลใน Cloud Storage แล้วยืนยันว่าที่เก็บข้อมูลและไฟล์อยู่ในนั้น
4 เริ่มต้นแอปฤดูใบไม้ผลิ
เริ่มเขียนแอปโดยใช้บรรทัดคําสั่งเพื่อสร้างแอป Spring Boot ใหม่ด้วย Spring Initializr ดังนี้
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
โปรดทราบว่าคู่มือเริ่มต้นจะเพิ่ม spring-boot-starter-web
และ spring-cloud-gcp-starter-storage
ในทรัพยากร Dependency ใน pom.xml
ของแอปเทมเพลตโดยอัตโนมัติ
วิธีเปลี่ยนเป็นไดเรกทอรีของแอปเทมเพลต
$ cd spring-gcs
สร้างและเรียกใช้แอปโดยใช้ Maven
$ ./mvnw spring-boot:run
แอปจะเริ่มฟังในพอร์ต 8080 เปิดแท็บ Cloud Shell ใหม่และเรียกใช้ curl
เพื่อเข้าถึงแอป
$ curl localhost:8080
คุณควรได้รับการตอบกลับ 404 เนื่องจากแอปยังไม่ได้ทําอะไรที่เป็นประโยชน์ กลับไปที่แท็บ Cloud Shell ก่อนหน้าซึ่งแอปทํางานอยู่และยุติการทํางานด้วย Control+C
(Command+C
ใน Macintosh)
5 อ่านไฟล์ใน Cloud Storage
แก้ไขแอป Spring Boot เพื่อเข้าถึง my-file.txt
ซึ่งเป็นไฟล์ที่คุณจัดเก็บไว้ใน Cloud Storage ก่อนหน้านี้ เป้าหมายของคุณคือให้ส่งคืนเนื้อหาของไฟล์ผ่าน HTTP
ในวิธีการต่อไปนี้ คุณสามารถใช้ Vim แก้ไขไฟล์ได้ นอกจากนี้คุณยังใช้ Emacs, GNU Nano หรือตัวแก้ไขโค้ดในตัวของ Cloud Shell ได้ด้วย
$ cd ~/spring-gcs
เพิ่มตัวควบคุม REST GcsController
ลงในแอป
$ vi src/main/java/com/example/demo/GcsController.java
วางรหัสต่อไปนี้และอย่าลืมแก้ไข URI ทรัพยากรด้วยที่เก็บข้อมูลที่คุณสร้างขึ้นก่อนหน้านี้ คุณตรวจสอบที่เก็บข้อมูลได้โดยการเรียกใช้คําสั่ง 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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GcsController {
@Value("gs://REPLACE_WITH_YOUR_BUCKET/my-file.txt")
private Resource gcsFile;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String readGcsFile() throws IOException {
return StreamUtils.copyToString(
gcsFile.getInputStream(),
Charset.defaultCharset()) + "\n";
}
}
สร้างและเรียกใช้แอปด้วย Maven
$ ./mvnw spring-boot:run
แอปเริ่มฟังในพอร์ต 8080 เปิดแท็บ Cloud Shell ใหม่และเรียกใช้ curl
เพื่อเข้าถึงแอป
$ curl localhost:8080
ตอนนี้คุณควรจะเห็นเนื้อหาของไฟล์ที่ส่งคืนมาจากแอป ไปที่แท็บ Cloud Shell ก่อนหน้าซึ่งแอปทํางานอยู่และยุติลงด้วย Control+C
(Command+C
ใน Macintosh)
6 เขียนไฟล์ใน Cloud Storage
คุณอ่านเนื้อหาในไฟล์ใน Cloud Storage แล้วเปิดเผยผ่านตัวควบคุม Spring REST จากนั้นเปลี่ยนเนื้อหาของไฟล์โดยการโพสต์เนื้อหาของไฟล์ใหม่ไปยังปลายทาง HTTP เดียวกัน
คุณต้องเพิ่มวิธีอื่นใน GcsController
ที่ตอบสนองต่อ HTTP POST และเขียนข้อมูลลงในไฟล์ของ Cloud Storage ในครั้งนี้ ให้แคสต์ฤดูใบไม้ผลิ Resource
ไปยัง WritableResource
อัปเดต GcsController
ด้วยการนําเข้าเพิ่มเติมที่คุณต้องการ
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;
เพิ่มเมธอดปลายทางใหม่ลงในตัวควบคุม
src/main/java/com/example/demo/GcsController.java
@RestController
public class GcsController {
@RequestMapping(value = "/", method = RequestMethod.POST)
String writeGcs(@RequestBody String data) throws IOException {
try (OutputStream os = ((WritableResource) gcsFile).getOutputStream()) {
os.write(data.getBytes());
}
return "file was updated\n";
}
...
}
สร้างและเรียกใช้แอปด้วย Maven
$ ./mvnw spring-boot:run
แอปเริ่มฟังในพอร์ต 8080 เปิดแท็บ Cloud Shell ใหม่และเรียกใช้ curl
เพื่อโพสต์ข้อความไปยังแอป
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
คุณจะเห็นการยืนยันว่าเนื้อหาของไฟล์ได้รับการอัปเดตแล้ว แต่ขอให้ยืนยันโดยใช้ GET
$ curl localhost:8080
คุณควรจะเห็นเนื้อหาอัปเดตของไฟล์ที่แสดงผลจากแอป กลับไปที่แท็บ Cloud Shell ก่อนหน้าที่แอปทํางานอยู่และยุติการทํางานด้วย Control+C
(Command+C
ใน Macintosh)
7 ยินดีด้วย
คุณรู้วิธีใช้นามแฝง Spring Resource เพื่อเข้าถึงไฟล์ต่างๆ ใน Cloud Storage ได้ง่ายๆ คุณเขียนเว็บแอป Spring Boot ที่อ่านและเขียนไฟล์ลงใน Cloud Storage ได้ และคุณได้เรียนรู้เกี่ยวกับ Spring Boot Starter สําหรับ Cloud Storage ที่เปิดใช้ฟังก์ชันการทํางานนั้นแล้ว
ดูข้อมูลเพิ่มเติม
- พื้นที่เก็บข้อมูลระบบคลาวด์
- โปรเจ็กต์ Google Cloud ของ Spring Cloud
- ที่เก็บข้อมูล Spring on Google Cloud GitHub
- Java ใน Google Cloud
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตทั่วไปของ Creative Commons Attribution 2.0