Informacje o tym ćwiczeniu (w Codelabs)
1. Opis
Spring Framework korzysta z abstrakcji ResourceLoader
, aby móc łatwo odczytywać i zapisywać pliki z różnych źródeł, takich jak system plików, ścieżka klasy czy strona internetowa. Wystarczy, że określisz identyfikator URI zasobu, używając dobrze znanego prefiksu protokołu. Aby na przykład uzyskać dostęp do pliku w lokalnym systemie plików, musisz podać identyfikator URI, taki jak file:/data/config.yaml
.
Napiszesz wiosną aplikację rozruchową, która będzie miała dostęp do plików przechowywanych w Cloud Storage, korzystając z abstrakcji zasobu Spring i przedrostka protokołu gs:
.
W tym celu użyj narzędzia Cloud Shell i narzędzia wiersza poleceń gcloud z pakietu SDK Cloud.
Czego się nauczysz:
- Jak zacząć uruchamianie wiosennego rozruchu Cloud Storage
- Jak uzyskać dostęp do plików w Cloud Storage w Spring
- Jak korzystać z podsumowań wiosennych
Resource
iWritableResource
Czego potrzebujesz
- Projekt Google Cloud
- Przeglądarka taka jak Google Chrome
- Znajomość standardowych edytorów tekstu systemu Linux, takich jak Vim, Emacs czy GNU Nano
Jak będziesz korzystać z ćwiczeń z programowania?
Jak oceniasz tworzenie aplikacji internetowych HTML i CSS?
Jak oceniasz korzystanie z usług Google Cloud?
2. Konfiguracja i wymagania
Konfiguracja środowiska we własnym tempie
Jeśli nie masz jeszcze konta Google (Gmail lub Google Apps), musisz je utworzyć. Zaloguj się w konsoli Google Cloud Platform (console.cloud.google.com) i utwórz nowy projekt:
Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa została już użyta i nie będzie działać). W ćwiczeniach nazywamy je później PROJECT_ID
.
Aby móc używać zasobów Google Cloud, musisz najpierw włączyć płatności w Cloud Console.
Ćwiczenia z programowania nie powinny kosztować więcej niż kilka dolarów, ale mogą być większe, jeśli zdecydujesz się wykorzystać więcej zasobów lub pozostawisz to uruchomione (zobacz sekcję „Czyszczenie” na końcu tego dokumentu).
Nowi użytkownicy Google Cloud Platform mogą skorzystać z bezpłatnej wersji próbnej o wartości 300 USD.
Cloud Shell
Będziesz używać Cloud Shell – środowiska wiersza poleceń uruchomionego w Google Cloud.
Aktywuj Google Cloud Shell
W konsoli GCP kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:
Następnie kliknij "Uruchom Cloud Shell"
Udostępnienie środowiska i połączenie się z nim powinno zająć tylko kilka chwil:
Ta maszyna wirtualna jest wyposażona we wszystkie potrzebne narzędzia dla programistów. Oferuje trwały katalog domowy o pojemności 5 GB oraz działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Znaczna część (lub nawet całość) zadań wykonywanych w tym module można wykonać w przeglądarce lub na Chromebooku Google.
Po połączeniu z Cloud Shell zobaczysz, że uwierzytelniono już projekt i masz już ustawiony identyfikator PROJECT_ID.
Uruchom następujące polecenie w Cloud Shell, aby potwierdzić, że jesteś uwierzytelniony:
gcloud auth list
Polecenie wyjściowe
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Polecenie wyjściowe
[core] project = <PROJECT_ID>
Jeśli nie, możesz ustawić ją za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Polecenie wyjściowe
Updated property [core/project].
3. Tworzenie pliku w Cloud Storage
Po uruchomieniu Cloud Shell możesz zacząć tworzyć pliki i przenosić je do Cloud Storage.
Utwórz plik o nazwie my-file.txt
:
$ echo "Hello World from GCS" > my-file.txt
Następnie utwórz nowy unikalny zasobnik w Cloud Storage i przenieś do niego tam plik za pomocą gsutil
.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
Otwórz przeglądarkę miejsca na dane w Cloud Storage i sprawdź, czy w zasobniku znajdują się zasobniki i pliki.
4. Inicjowanie aplikacji Spring Spring
Zacznij pisać aplikację, korzystając z wiersza poleceń, aby wygenerować nową aplikację Spring Run Initializr:
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
Pamiętaj, że inicjator automatycznie doda spring-boot-starter-web
i spring-cloud-gcp-starter-storage
do zależności w pom.xml
.
Przejdź do katalogu aplikacji szablonu:
$ cd spring-gcs
Utwórz i uruchom aplikację za pomocą Maven.
$ ./mvnw spring-boot:run
Aplikacja zacznie nasłuchiwać na porcie 8080. Otwórz nową kartę Cloud Shell i uruchom curl
, aby uzyskać dostęp do aplikacji.
$ curl localhost:8080
Powinna pojawić się odpowiedź 404, ponieważ aplikacja nie wykonała jeszcze żadnych działań. Wróć do poprzedniej karty Cloud Shell, na której działa aplikacja, i zamknij ją za pomocą Control+C
(Command+C
na Macu).
5. Odczytaj plik w Cloud Storage
Zmodyfikuj swoją aplikację Spring Run, aby uzyskać dostęp do pliku my-file.txt
zapisanego wcześniej w Cloud Storage. Celem jest zwracanie treści pliku za pomocą protokołu HTTP.
Za pomocą Vim możesz edytować pliki za pomocą Vim, ale możesz też skorzystać z usług Emacs, GNU Nano lub wbudowanego edytora kodu w Cloud Shell:
$ cd ~/spring-gcs
Dodaj kontroler REST GcsController
do aplikacji.
$ vi src/main/java/com/example/demo/GcsController.java
Wklej ten kod i nie zapomnij naprawić identyfikatora URI zasobu z utworzonym wcześniej zasobnikiem. Aby sprawdzić zasobnik, uruchom polecenie 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";
}
}
Utwórz i uruchom aplikację za pomocą Maven:
$ ./mvnw spring-boot:run
Aplikacja zaczyna nasłuchiwać na porcie 8080. Otwórz nową kartę Cloud Shell i uruchom curl
, aby uzyskać dostęp do aplikacji.
$ curl localhost:8080
Teraz zobaczysz, że treść pliku zwrócono z aplikacji. Przejdź do poprzedniej karty Cloud Shell, na której działa aplikacja, i zamknij ją, używając Control+C
(Command+C
na Macu).
6. Zapisz w pliku w Cloud Storage
Odczytujesz zawartość pliku w Cloud Storage i udostępniasz go za pomocą kontrolera Spring REST. Teraz zmień zawartość pliku, publikując jego zawartość w tym samym punkcie końcowym HTTP.
Musisz dodać do metody GcsController
inną metodę, która będzie odpowiadać na żądania HTTP POST i zapisać dane w pliku w Cloud Storage. Tym razem wiosną Resource
przesyłaj WritableResource
.
Zaktualizuj GcsController
, dodając potrzebne importy.
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;
Dodaj nową metodę punktu końcowego do kontrolera.
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";
}
...
}
Utwórz i uruchom aplikację za pomocą Maven:
$ ./mvnw spring-boot:run
Aplikacja zaczyna nasłuchiwać na porcie 8080. Otwórz nową kartę Cloud Shell i uruchom curl
, aby opublikować wiadomość w aplikacji.
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
Powinno pojawić się potwierdzenie aktualizacji zawartości pliku. Możesz to jednak zweryfikować, wykonując GET
.
$ curl localhost:8080
Zobaczysz zaktualizowaną zawartość pliku zwróconego przez aplikację. Wróć do poprzedniej karty Cloud Shell, na której działa aplikacja, i zamknij ją za pomocą Control+C
(Command+C
na Macu).
7. Gratulacje!
Wiesz już, jak używać abstrakcji zasobu Spring, aby mieć łatwy dostęp do plików w Cloud Storage. Masz utworzoną aplikację internetową Spring rozruchu, która może odczytywać i zapisywać pliki w Cloud Storage. Omówiliśmy też funkcję Spring Starter Starter w Cloud Storage, która umożliwia korzystanie z tej funkcji.
Więcej informacji
- Cloud Storage
- Wiosenny projekt Google Cloud
- Repozytorium wiosenne w Google Cloud GitHub
- Java w Google Cloud
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.