1. Omówienie
Spring Framework udostępnia abstrakcję ResourceLoader
umożliwiającą łatwe odczytywanie i zapisywanie plików z różnych źródeł, takich jak system plików, ścieżka klasy czy sieć. Wystarczy, że podasz identyfikator URI zasobu za pomocą dobrze znanego prefiksu protokołu. Aby na przykład uzyskać dostęp do pliku w lokalnym systemie plików, podaj identyfikator URI taki jak file:/data/config.yaml
.
Napiszesz aplikację Spring Boot, która będzie uzyskiwać dostęp do plików przechowywanych w Cloud Storage z użyciem abstrakcji zasobów Spring i prefiksu protokołu gs:
.
Użyjesz do tego Cloud Shell i narzędzia wiersza poleceń gcloud z pakietu SDK Cloud.
Czego się nauczysz
- Jak używać polecenia inicjującego sprężynowego rozruchu w Cloud Storage
- Jak uzyskać dostęp do plików w Cloud Storage za pomocą Spring
- Jak używać abstrakcyjnych abstrakcji z wiosny
Resource
iWritableResource
Czego potrzebujesz
- Projekt Google Cloud
- przeglądarki, na przykład Google Chrome;
- znajomość standardowych edytorów tekstu systemu Linux, takich jak Vim, Emacs czy GNU Nano;
Jak będziesz używać tych ćwiczeń w Codelabs?
Jak oceniasz swoje doświadczenia z tworzeniem aplikacji internetowych HTML i CSS?
Jak oceniasz korzystanie z usług Google Cloud?
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć.
Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa jest już zajęta i nie będzie Ci odpowiadać). W dalszej części tego ćwiczenia w Codelabs będzie ona określana jako PROJECT_ID
.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.
Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” W tym samouczku znajdziesz wskazówki, jak wyłączyć zasoby, aby uniknąć naliczania opłat. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Cloud Shell
Użyjesz Cloud Shell – środowiska wiersza poleceń działającego w Google Cloud.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell .
Jeśli dopiero zaczynasz korzystać z Cloud Shell, wyświetli się ekran pośredni (w części strony widocznej po przewinięciu) z opisem tej funkcji. W takim przypadku kliknij Dalej (nie zobaczysz go więcej). Tak wygląda ten jednorazowy ekran:
Uzyskanie dostępu do Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Większość czynności z tego ćwiczenia z programowania można wykonać w przeglądarce lub na Chromebooku.
Po nawiązaniu połączenia z Cloud Shell powinno pojawić się informacja, że użytkownik jest już uwierzytelniony i że projekt jest już ustawiony na identyfikator Twojego projektu.
- Uruchom to polecenie w Cloud Shell, aby potwierdzić, że jesteś uwierzytelniony:
gcloud auth list
Dane wyjściowe polecenia
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Dane wyjściowe polecenia
[core] project = <PROJECT_ID>
Jeśli tak nie jest, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Dane wyjściowe polecenia
Updated property [core/project].
3. Utwórz plik 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 plik za pomocą gsutil
.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
Otwórz przeglądarkę pamięci masowej w Cloud Storage i sprawdź, czy zasobnik oraz plik są tam.
4. Inicjowanie aplikacji Spring Boot
Zacznij pisać aplikację, korzystając z wiersza poleceń, aby wygenerować nową aplikację Spring Boot za pomocą 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 -
Pamiętaj, że narzędzie Zdarzenie inicjujące automatycznie doda spring-boot-starter-web
i spring-cloud-gcp-starter-storage
do Twoich zależności w elemencie pom.xml
aplikacji z szablonami.
Przejdź do katalogu aplikacji szablonu:
$ cd spring-gcs
Sprawdź, czy JAVA_HOME
ma prawidłową wersję pakietu JDK:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Skompiluj 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
Powinien pojawić się błąd 404, ponieważ aplikacja nie jest jeszcze pomocna.
Wróć do poprzedniej karty Cloud Shell, na której działa aplikacja, i zamknij ją, naciskając Control+C
(Command+C
na Macu).
5. Odczytywanie pliku w Cloud Storage
Zmodyfikuj aplikację Spring Boot, aby uzyskać dostęp do pliku my-file.txt
zapisanego wcześniej w Cloud Storage. Twoim celem jest zwracanie zawartości pliku przez HTTP.
W poniższych instrukcjach będziesz używać Vim do edytowania plików. Możesz też skorzystać z Emacs, GNU Nano lub wbudowanego edytora kodu w Cloud Shell:
$ cd ~/spring-gcs
Dodaj do aplikacji kontroler REST GcsController
.
$ vi src/main/java/com/example/demo/GcsController.java
Wklej ten kod. Pamiętaj, aby poprawić identyfikator URI zasobu za pomocą utworzonego wcześniej zasobnika. Zasobnik możesz sprawdzić, uruchamiając 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.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());
}
}
Skompiluj 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
Powinna pojawić się zawartość pliku zwrócona z aplikacji. Otwórz poprzednią kartę Cloud Shell, na której działa aplikacja, i zamknij ją, używając polecenia Control+C
(Command+C
na Macu).
6. Zapisz do pliku w Cloud Storage
Zawartość pliku została odczytana w Cloud Storage i udostępniona za pomocą kontrolera Spring REST. Teraz zmień zawartość pliku, publikując nową treść w tym samym punkcie końcowym HTTP.
Musisz dodać do GcsController
inną metodę, która będzie odpowiadać na żądanie HTTP POST i zapisywać dane w Twoim pliku w Cloud Storage. Tym razem ustaw wiosnę Resource
na: WritableResource
.
Zaktualizuj GcsController
, wprowadzając potrzebne dodatkowe 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;
import org.springframework.web.bind.annotation.PostMapping;
Dodaj nową metodę punktu końcowego do kontrolera.
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";
}
...
}
Skompiluj 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 jednak to sprawdzić, wykonując GET
.
$ curl localhost:8080
Powinna pojawić się zaktualizowana zawartość pliku zwrócona przez aplikację. Wróć do poprzedniej karty Cloud Shell, na której działa aplikacja, i zamknij ją, naciskając Control+C
(Command+C
na Macu).
7. Gratulacje!
Wiesz już, jak korzystać z abstrakcji zasobów Spring, aby łatwo uzyskiwać dostęp do plików w Cloud Storage. Udało Ci się napisać aplikację internetową Spring Boot, która może odczytywać i zapisywać pliki w Cloud Storage. Omówiliśmy również narzędzie startowe Spring Boot dla Cloud Storage, które umożliwia tę funkcję.
Więcej informacji
- Cloud Storage
- platformę wiosenną w Google Cloud
- Spring w repozytorium Google Cloud na GitHubie
- Java w Google Cloud
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.