1. Übersicht
Spring Framework bietet eine ResourceLoader
-Abstraktion, um Dateien aus verschiedenen Quellen wie Dateisystem, Klassenpfad oder Web einfach zu lesen und zu schreiben. 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, die mithilfe der Spring Resource-Abstraktion und des Protokollpräfixes gs:
auf Dateien zugreift, die in Cloud Storage gespeichert sind.
Dazu verwenden Sie Cloud Shell und das gcloud-Befehlszeilentool des Cloud SDK.
Aufgaben in diesem Lab
- So verwenden Sie den Cloud Storage Spring Boot-Starter
- 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?
<ph type="x-smartling-placeholder">Wie würden Sie Ihre Erfahrung mit der Erstellung von HTML- und CSS-Webanwendungen bewerten?
<ph type="x-smartling-placeholder">Wie würden Sie Ihre Erfahrungen im Umgang mit Google Cloud-Diensten bewerten?
<ph type="x-smartling-placeholder">2. Einrichtung und Anforderungen
Umgebung für das selbstbestimmte 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 ein Konto 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 in diesem Codelab später als PROJECT_ID
bezeichnet.
- Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen zu können.
Dieses Codelab sollte möglichst wenig kosten. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . Hier erfahren Sie, wie Sie Ressourcen herunterfahren, damit Ihnen über dieses Tutorial hinaus keine Kosten entstehen. Neue Google Cloud-Nutzer können an einem kostenlosen Testzeitraum mit 300$Guthaben teilnehmen.
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 zum ersten Mal verwenden, wird ein Zwischenbildschirm (below the fold) angezeigt, in dem beschrieben wird, worum es sich dabei handelt. Klicken Sie in diesem Fall auf Weiter. Der Chat wird nie wieder angezeigt. So sieht dieser einmalige Bildschirm aus:
Die Bereitstellung und Verbindung mit Cloud Shell dauert nur einen Moment.
Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Viele, wenn nicht sogar alle Arbeiten in diesem Codelab können Sie ganz einfach mit einem Browser oder Ihrem Chromebook erledigen.
Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass das Projekt bereits auf Ihre Projekt-ID eingestellt ist.
- Führen Sie in 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
Nach dem Start von Cloud Shell können Sie Dateien erstellen und an 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 mithilfe von 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 Anwendung über die Befehlszeile, um mit Spring Initializr eine neue Spring Boot-Anwendung zu 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 der Initializr die spring-boot-starter-web
und die spring-cloud-gcp-starter-storage
automatisch zu Ihren Abhängigkeiten im pom.xml
der Vorlagen-App hinzufügt.
Wechseln Sie in das Verzeichnis der Vorlagenanwendung:
$ cd spring-gcs
Achten Sie darauf, dass JAVA_HOME
auf die richtige JDK-Version eingestellt ist:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Erstellen Sie die Anwendung mit Maven und führen Sie sie aus.
$ ./mvnw spring-boot:run
Die App überwacht nun 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, da die App noch nichts Nützliches bietet.
Kehren Sie zum vorherigen Cloud Shell-Tab zurück, in dem die Anwendung 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-Anwendung, um auf die Datei my-file.txt
zuzugreifen, 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 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 einen REST-Controller GcsController
hinzu.
$ vi src/main/java/com/example/demo/GcsController.java
Fügen Sie den folgenden Code ein und vergessen Sie nicht, den Ressourcen-URI mit dem Bucket zu korrigieren, den Sie zuvor erstellt haben. Sie können den Bucket prüfen, indem Sie den Befehl echo $BUCKET
ausführen.
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());
}
}
Erstellen Sie die Anwendung mit Maven und führen Sie sie aus:
$ ./mvnw spring-boot:run
Die App überwacht 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 nun sehen, dass der Inhalt der Datei, die von der Anwendung zurückgegeben wurde, angezeigt wird. Wechseln Sie zum vorherigen Cloud Shell-Tab, in dem die Anwendung ausgeführt wird, und beenden Sie sie mit Control+C
(Command+C
auf Macintosh).
6. In die Datei in Cloud Storage schreiben
Sie haben den Inhalt der Datei in Cloud Storage gelesen und über einen Spring REST-Controller verfügbar gemacht. Ä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 antwortet und die Daten in Ihre Datei in Cloud Storage schreibt. Dieses Mal kannst du den Frühlings-Resource
auf WritableResource
streamen.
Aktualisieren Sie 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";
}
...
}
Erstellen Sie die Anwendung mit Maven und führen Sie sie aus:
$ ./mvnw spring-boot:run
Die App überwacht 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
Es sollte eine Bestätigung angezeigt werden, dass der Inhalt der Datei aktualisiert wurde. Führe dies jedoch mit GET
aus, um dies zu überprüfen.
$ curl localhost:8080
Sie sollten den aktualisierten Inhalt der Datei sehen, die von der Anwendung zurückgegeben wurde. Kehren Sie zum vorherigen Cloud Shell-Tab zurück, in dem die Anwendung ausgeführt wird, und beenden Sie sie mit Control+C
(Command+C
auf Macintosh).
7. Glückwunsch!
Sie haben gelernt, die Spring Resource-Abstraktion zu verwenden, um auf einfache Weise auf Dateien in Cloud Storage zuzugreifen. Sie haben eine Spring Boot-Webanwendung geschrieben, die eine Datei in Cloud Storage lesen und darin schreiben kann. Sie haben auch den Spring Boot-Starter für Cloud Storage kennengelernt, der diese Funktionalität ermöglicht.
Weitere Informationen
- Cloud Storage
- Spring Framework in Google Cloud
- Spring on Google Cloud GitHub-Repository
- Java in Google Cloud
Lizenz
Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.