1. Przegląd
Spring Framework udostępnia abstrakcję ResourceLoader, która ułatwia odczytywanie i zapisywanie plików z różnych źródeł, takich jak system plików, ścieżka klasy czy internet. Wystarczy podać identyfikator URI zasobu, używając znanego prefiksu protokołu. Aby na przykład uzyskać dostęp do pliku w lokalnym systemie plików, należy podać identyfikator URI w formacie file:/data/config.yaml.
Napiszesz aplikację Spring Boot, która będzie uzyskiwać dostęp do plików przechowywanych w Cloud Storage za pomocą abstrakcji zasobów Spring i prefiksu protokołu gs:.
Zrobisz to za pomocą Cloud Shell i narzędzia wiersza poleceń gcloud z pakietu Cloud SDK.
Czego się nauczysz
- Jak korzystać z narzędzia Cloud Storage Spring Boot Starter
- Dostęp do plików w Cloud Storage za pomocą Spring
- Jak korzystać z abstrakcji
ResourceiWritableResourcew Springu
Czego potrzebujesz
- projekt Google Cloud,
- przeglądarka, np. Google Chrome;
- Znajomość standardowych edytorów tekstu systemu Linux, takich jak Vim, Emacs i GNU Nano
Jak zamierzasz wykorzystać ten codelab?
Jak oceniasz swoje doświadczenie w tworzeniu aplikacji internetowych w 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 użyj istniejącego. (Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć).
Zapamiętaj identyfikator projektu, czyli unikalną nazwę we wszystkich projektach Google Cloud (podana powyżej nazwa jest już zajęta i nie będzie działać w Twoim przypadku). W dalszej części tego ćwiczenia będzie on nazywany PROJECT_ID.
- Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów Google Cloud.
Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Wykonaj instrukcje z sekcji „Czyszczenie”, w której znajdziesz informacje o tym, jak wyłączyć zasoby, aby uniknąć naliczenia opłat po zakończeniu tego samouczka. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Cloud Shell
Będziesz używać Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell
.
Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni (część strony widoczna po przewinięciu) z opisem tego środowiska. W takim przypadku kliknij Dalej, a ten ekran nie będzie się już wyświetlać. Ten wyświetlany jednorazowo ekran wygląda tak:
Uzyskanie dostępu do środowiska Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Większość zadań w tym module, a być może wszystkie, możesz wykonać w przeglądarce lub na Chromebooku.
Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu.
- Aby potwierdzić, że uwierzytelnianie zostało przeprowadzone, uruchom w Cloud Shell to polecenie:
gcloud auth list
Wynik 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
Wynik polecenia
[core] project = <PROJECT_ID>
Jeśli nie, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Wynik polecenia
Updated property [core/project].
3. Tworzenie pliku w Cloud Storage
Po uruchomieniu Cloud Shell możesz zacząć tworzyć pliki i przesyłać 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 w Cloud Storage i sprawdź, czy zasobnik i plik są na miejscu.
4. Inicjowanie aplikacji Spring Boot
Zacznij pisać aplikację, używając wiersza poleceń do wygenerowania nowej aplikacji 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 Initializr automatycznie doda spring-boot-starter-web i spring-cloud-gcp-starter-storage do zależności w pom.xml aplikacji szablonu.
Przejdź do katalogu aplikacji szablonu:
$ cd spring-gcs
Sprawdź, czy JAVA_HOME ma ustawioną prawidłową wersję 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
Powinna pojawić się odpowiedź 404, ponieważ aplikacja nie robi jeszcze niczego przydatnego.
Wróć na poprzednią kartę Cloud Shell, na której działa aplikacja, i zamknij ją, naciskając Control+C (Command+C na komputerze Macintosh).
5. Odczytywanie pliku w Cloud Storage
Zmodyfikuj aplikację Spring Boot, aby uzyskać dostęp do pliku my-file.txt, który został wcześniej zapisany w Cloud Storage. Twoim celem jest po prostu zwrócenie zawartości pliku przez HTTP.
W tych instrukcjach do edytowania plików użyjemy edytora Vim, ale możesz też użyć edytora 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 i nie zapomnij poprawić identyfikatora URI zasobu, używając utworzonego wcześniej zasobnika. Możesz sprawdzić zasobnik, 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 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 się teraz wyświetlić 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 komputerze Macintosh).
6. Zapisywanie w pliku w Cloud Storage
Odczytujesz zawartość pliku w Cloud Storage i udostępniasz ją za pomocą kontrolera Spring REST. Teraz zmień zawartość pliku, przesyłając nową zawartość pliku do tego samego punktu końcowego HTTP.
Musisz dodać do GcsController kolejną metodę, która będzie odpowiadać na żądania HTTP POST i zapisywać dane w pliku w Cloud Storage. Tym razem rzuć zaklęcie Wiosna Resource na 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;
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 zacznie 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, że zawartość pliku została zaktualizowana. Sprawdź to jednak, wykonując GET.
$ curl localhost:8080
Powinna wyświetlić 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 komputerze Macintosh).
7. Gratulacje!
Wiesz już, jak używać abstrakcji zasobów Spring, aby łatwo uzyskiwać dostęp do plików w Cloud Storage. Masz napisaną aplikację internetową Spring Boot, która może odczytywać i zapisywać pliki w Cloud Storage. Poznaliśmy też starter Spring Boot dla Cloud Storage, który umożliwia tę funkcję.
Więcej informacji
- Cloud Storage
- Spring Framework w Google Cloud
- Repozytorium GitHub Spring on Google Cloud
- Java w Google Cloud
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.