Mit der Spring-Ressourcenabstraktion auf Dateien in Cloud Storage zugreifen
Informationen zu diesem Codelab
1. Übersicht
Spring Framework bietet eine Abstraktion von ResourceLoader
zum einfachen Lesen und Schreiben von Dateien aus verschiedenen Quellen, z. B. dem Dateisystem, dem Kurspfad oder dem Web. Dazu müssen Sie nur den URI für die Ressource über das bekannte 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-App, die auf Dateien zugreift, die in Cloud Storage gespeichert sind. Dabei werden die Spring-Ressourcen-Abstraktion und das Präfix gs:
verwendet.
Verwenden Sie dazu Cloud Shell und das gcloud-Befehlszeilentool des Cloud SDK.
Lerninhalte
- Cloud Storage Spring Boot-Auslöser verwenden
- Mit Spring auf Dateien in Cloud Storage zugreifen
- Spring-Abstraktionen
Resource
undWritableResource
verwenden
Voraussetzungen
- Ein Google Cloud-Projekt
- Ein Browser, z. B. Google Chrome
- Kenntnisse in standardmäßigen Linux-Texteditoren wie Vim, Emacs und GNU Nano
Wie verwenden Sie das Codelab?
Wie würdest du deine Erfahrung beim Erstellen von HTML- und CSS-Webanwendungen bewerten?
Wie würdest du deine Erfahrung mit der Nutzung der Google Cloud-Dienste bewerten?
2. Einrichtung und Anforderungen
Umgebung im eigenen Tempo einrichten
Wenn Sie noch kein Google-Konto haben (Gmail oder Google Apps), müssen Sie eines erstellen. Melden Sie sich unter console.cloud.google.com in der Google Cloud Platform Console an und erstellen Sie ein neues Projekt:
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. In diesem Codelab wird sie später als PROJECT_ID
bezeichnet.
Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen zu nutzen.
Das Durchlaufen dieses Codelabs sollte nicht mehr als ein paar Dollar kosten. Es kann aber auch sein, dass Sie mehr Ressourcen brauchen oder sie weiterlaufen möchten (siehe Abschnitt „Bereinigen“ am Ende dieses Dokuments).
Neuen Google Cloud Platform-Nutzern steht ein kostenloser Testzeitraum im Wert von 300 $ zur Verfügung.
Cloud Shell
Sie verwenden Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird.
Google Cloud Shell aktivieren
Klicken Sie in der GCP Console oben rechts in der Symbolleiste auf das Cloud Shell-Symbol:
Klicken Sie dann auf "Cloud Shell starten":
Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment:
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 auf der Google Cloud, wodurch Netzwerkleistung und Authentifizierung deutlich verbessert werden. Sie können die meisten, wenn nicht sogar alle Schritte in diesem Lab einfach mit einem Browser oder Ihrem Google Chromebook durchführen.
Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass das Projekt auf Ihre PROJECT_ID festgelegt ist.
Führen Sie in Cloud Shell den folgenden Befehl aus, um zu bestätigen, dass Sie authentifiziert sind:
gcloud auth list
Befehlsausgabe
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
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. Dateien in Cloud Storage erstellen
Nachdem Cloud Shell gestartet wurde, können Sie Dateien erstellen und zu Cloud Storage übertragen.
Erstelle 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
.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
Rufen Sie den Speicherbrowser in Cloud Storage auf und prüfen Sie, ob der Bucket und die Datei vorhanden sind.
4. Spring-Boot-App initialisieren
Schreiben Sie die Anwendung mithilfe der Befehlszeile, um eine neue Spring-Boot-App mit Spring Initializr zu generieren:
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
Der Initializr fügt den Abhängigkeiten (spring-boot-starter-web
) und spring-cloud-gcp-starter-storage
automatisch die pom.xml
in der Vorlagen-App hinzu.
Wechseln Sie in das Verzeichnis der Vorlagen-App:
$ cd spring-gcs
Anwendung mit Maven erstellen und ausführen
$ ./mvnw spring-boot:run
Die App beginnt mit der Überwachung auf Port 8080. Öffnen Sie einen neuen Cloud Shell-Tab und führen Sie curl
aus, um auf die Anwendung zuzugreifen.
$ curl localhost:8080
Sie sollten eine 404-Antwort erhalten, weil die App noch nichts bietet. 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
unter Macintosh).
5. Datei in Cloud Storage lesen
Ändern Sie die Spring Boot-App auf my-file.txt
, die Datei, die Sie zuvor in Cloud Storage gespeichert haben. Ihr Ziel ist es, die Inhalte der Datei einfach über HTTP zurückzugeben.
In der folgenden Anleitung verwenden Sie Vim, um die Dateien zu bearbeiten. 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 den 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.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";
}
}
Erstellen Sie die Anwendung mit Maven und führen Sie sie aus:
$ ./mvnw spring-boot:run
Die App beginnt mit der Überwachung auf Port 8080. Öffnen Sie einen neuen Cloud Shell-Tab und führen Sie curl
aus, um auf die Anwendung zuzugreifen.
$ curl localhost:8080
Sie sollten jetzt sehen, dass der Inhalt der Datei von der App zurückgegeben wurde. Wechseln Sie zum vorherigen Cloud Shell-Tab, auf dem die App ausgeführt wird, und beenden Sie sie mit Control+C
(Command+C
unter Macintosh).
6. In die Datei in Cloud Storage schreiben
Sie haben den Inhalt der Datei in Cloud Storage gelesen und über einen Spring REST REST API freigegeben. Ä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. Streamen Sie dieses Mal den Frühling Resource
auf WritableResource
.
Aktualisieren Sie den GcsController
mit zusätzlichen erforderlichen Importen.
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;
Fügen Sie dem Controller die neue Endpunktmethode hinzu.
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";
}
...
}
Erstellen Sie die Anwendung mit Maven und führen Sie sie aus:
$ ./mvnw spring-boot:run
Die App beginnt mit der Überwachung auf Port 8080. Öffnen Sie einen neuen Cloud Shell-Tab und führen Sie curl
aus, um eine Nachricht in der Anwendung 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üfe das aber mithilfe von GET
.
$ curl localhost:8080
Sie sollten die aktualisierten Inhalte der Datei sehen, die 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
unter Macintosh).
7. Glückwunsch!
Sie haben gelernt, wie Sie mit der Spring Resource-Abstraktion ganz einfach auf Dateien in Cloud Storage zugreifen können. Sie haben eine Spring-Boot-Webanwendung geschrieben, die Dateien in Cloud Storage lesen und schreiben kann. Außerdem haben Sie sich mit dem Spring-Boot-Starter für Cloud Storage vertraut gemacht.
Weitere Informationen
- Cloud Storage
- Spring Cloud-Google Cloud-Projekt
- GitHub-Repository zu Spring on Google Cloud
- Java in Google Cloud
Lizenz
Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.