1. Übersicht
Das Spring Framework bietet eine ResourceLoader-Abstraktion, mit der Dateien aus verschiedenen Quellen wie dem Dateisystem, dem Klassenpfad oder dem Web einfach gelesen und geschrieben werden können. Sie müssen lediglich den URI zur Ressource mit dem bekannten Protokollpräfix angeben. Wenn Sie beispielsweise auf eine Datei im lokalen Dateisystem zugreifen möchten, geben Sie einen URI wie file:/data/config.yaml an.
Sie schreiben eine Spring Boot-Anwendung, mit der Sie mit der Spring Resource-Abstraktion und dem Protokollpräfix gs: auf Dateien zugreifen können, die in Cloud Storage gespeichert sind.
Dazu verwenden Sie Cloud Shell und das Cloud SDK-Befehlszeilentool „gcloud“.
Lerninhalte
- Cloud Storage Spring Boot-Starter verwenden
- Mit Spring auf Dateien in Cloud Storage zugreifen
Resource- undWritableResource-Abstraktionen von Spring verwenden
Voraussetzungen
- Ein Google Cloud-Projekt
- Ein Browser, z. B. Google Chrome
- Erfahrung mit standardmäßigen Linux-Texteditoren wie Vim, Emacs und GNU Nano
Wie werden Sie das Codelab verwenden?
Wie würden Sie Ihre Erfahrung mit der Entwicklung von HTML- und CSS-Web-Apps bewerten?
Wie würden Sie Ihre Erfahrungen mit Google Cloud-Diensten bewerten?
2. Einrichtung und Anforderungen
Umgebung zum selbstbestimmten Lernen einrichten
- Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder G Suite-Konto haben, müssen Sie eines erstellen.
Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. Sie wird später in diesem Codelab als PROJECT_ID bezeichnet.
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Google Cloud-Ressourcen verwenden zu können.
Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Folgen Sie bitte der Anleitung im Abschnitt „Bereinigen“, in der Sie erfahren, wie Sie Ressourcen herunterfahren können, damit nach Abschluss dieser Anleitung keine Gebühren anfallen. Neue Nutzer von Google Cloud kommen für das Programm für den kostenlosen Testzeitraum mit einem Guthaben von 300$ infrage.
Cloud Shell
Sie verwenden Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird.
Cloud Shell aktivieren
- Klicken Sie in der Cloud Console auf Cloud Shell aktivieren
.
Wenn Sie Cloud Shell noch nie gestartet haben, wird ein Fenster mit einer Beschreibung eingeblendet. Klicken Sie in diesem Fall einfach auf Weiter. So sieht dieses Fenster aus:
Das Herstellen der Verbindung mit der Cloud Shell sollte nur wenige Augenblicke dauern.
Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Die meisten, wenn nicht sogar alle Aufgaben in diesem Codelab können mit einem Browser oder Ihrem Chromebook erledigt werden.
Sobald die Verbindung mit der Cloud Shell hergestellt ist, sehen Sie, dass Sie bereits authentifiziert sind und für das Projekt schon Ihre Projekt-ID eingestellt ist.
- Führen Sie in der Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list
Befehlsausgabe
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
Befehlsausgabe
[core] project = <PROJECT_ID>
Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:
gcloud config set project <PROJECT_ID>
Befehlsausgabe
Updated property [core/project].
3. Datei in Cloud Storage erstellen
Nachdem Cloud Shell gestartet wurde, können Sie Dateien erstellen und in Cloud Storage übertragen.
Erstellen Sie eine Datei mit dem Namen my-file.txt:
$ echo "Hello World from GCS" > my-file.txt
Erstellen Sie dann einen neuen eindeutigen Bucket in Cloud Storage und übertragen Sie die Datei mit gsutil dorthin.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
Rufen Sie den Storage-Browser in Cloud Storage auf und prüfen Sie, ob der Bucket und die Datei vorhanden sind.
4. Spring Boot-Anwendung initialisieren
Beginnen Sie mit dem Schreiben der App, indem Sie über die Befehlszeile eine neue Spring Boot-App mit Spring Initializr generieren:
$ curl https://start.spring.io/starter.tgz \ -d type=maven-project \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
Beachten Sie, dass Initializr automatisch die spring-boot-starter-web und spring-cloud-gcp-starter-storage zu den Abhängigkeiten im pom.xml der Vorlagen-App hinzufügt.
Wechseln Sie in das Verzeichnis der Vorlagen-App:
$ cd spring-gcs
Prüfen Sie, ob JAVA_HOME auf die richtige JDK-Version eingestellt ist:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Erstellen und Ausführen der App mit Maven
$ ./mvnw spring-boot:run
Die App beginnt, Port 8080 zu überwachen. Öffnen Sie einen neuen Cloud Shell-Tab und führen Sie curl aus, um auf die App zuzugreifen.
$ curl localhost:8080
Sie sollten eine 404-Antwort erhalten, da die App noch nichts Nützliches tut.
Kehren Sie zum vorherigen Cloud Shell-Tab zurück, auf dem die App ausgeführt wird, und beenden Sie sie mit Control+C (Command+C auf Macintosh).
5. Datei in Cloud Storage lesen
Ändern Sie Ihre Spring Boot-App so, dass sie auf my-file.txt zugreifen kann, die Datei, die Sie zuvor in Cloud Storage gespeichert haben. Ihr Ziel ist es, den Inhalt der Datei einfach über HTTP zurückzugeben.
In der folgenden Anleitung wird Vim zum Bearbeiten der Dateien verwendet. Sie können aber auch Emacs, GNU Nano oder den integrierten Code-Editor in Cloud Shell verwenden:

$ cd ~/spring-gcs
Fügen Sie der App einen REST-Controller GcsController hinzu.
$ vi src/main/java/com/example/demo/GcsController.java
Fügen Sie den folgenden Code ein und korrigieren Sie den Ressourcen-URI mit dem Bucket, den Sie zuvor erstellt haben. Sie können den Bucket mit dem Befehl echo $BUCKET prüfen.
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());
}
}
App mit Maven erstellen und ausführen:
$ ./mvnw spring-boot:run
Die App beginnt, Port 8080 zu überwachen. Öffnen Sie einen neuen Cloud Shell-Tab und führen Sie curl aus, um auf die App zuzugreifen.
$ curl localhost:8080
Sie sollten jetzt sehen, dass der Inhalt der Datei von der App zurückgegeben wurde. Rufen Sie den vorherigen Cloud Shell-Tab auf, auf dem die App ausgeführt wird, und beenden Sie sie mit Control+C (Command+C auf Macintosh).
6. In die Datei in Cloud Storage schreiben
Sie lesen den Inhalt der Datei in Cloud Storage und stellen ihn über einen Spring REST-Controller bereit. Ändern Sie nun den Inhalt der Datei, indem Sie den neuen Dateiinhalt an denselben HTTP-Endpunkt senden.
Sie müssen GcsController eine weitere Methode hinzufügen, die auf HTTP POST reagiert und die Daten in Ihre Datei in Cloud Storage schreibt. Dieses Mal wandeln Sie die Spring-Variable Resource in WritableResource um.
Aktualisieren Sie die Datei GcsController mit zusätzlichen Importen, die Sie benötigen.
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;
Fügen Sie dem Controller die neue Endpunktmethode hinzu.
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";
}
...
}
App mit Maven erstellen und ausführen:
$ ./mvnw spring-boot:run
Die App beginnt, Port 8080 zu überwachen. Öffnen Sie einen neuen Cloud Shell-Tab und führen Sie curl aus, um eine Nachricht in der App zu posten.
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
Sie sollten eine Bestätigung sehen, dass der Inhalt der Datei aktualisiert wurde. Prüfen Sie das jedoch mit einem GET.
$ curl localhost:8080
Sie sollten sehen, dass der aktualisierte Inhalt der Datei von der App zurückgegeben wird. Kehren Sie zum vorherigen Cloud Shell-Tab zurück, auf dem die App ausgeführt wird, und beenden Sie sie mit Control+C (Command+C auf Macintosh).
7. Glückwunsch!
Sie haben gelernt, wie Sie mit der Spring Resource-Abstraktion einfach auf Dateien in Cloud Storage zugreifen können. Sie haben eine Spring Boot-Webanwendung geschrieben, die Daten aus einer Datei in Cloud Storage lesen und in eine Datei in Cloud Storage schreiben kann. Außerdem haben Sie den Spring Boot-Starter für Cloud Storage kennengelernt, der diese Funktion ermöglicht.
Weitere Informationen
- Cloud Storage
- Spring Framework in Google Cloud
- GitHub-Repository für Spring on Google Cloud
- Java in Google Cloud
Lizenz
Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.