Accedere ai file in Cloud Storage con l'astrazione Resource di Spring
Informazioni su questo codelab
1. Panoramica
Spring Framework fornisce un'astrazione ResourceLoader
per leggere e scrivere facilmente file da varie origini, come il file system, il percorso di classe o il Web. Devi solo specificare l'URI della risorsa utilizzando il prefisso del protocollo noto. Ad esempio, per accedere a un file nel file system locale, devi specificare un URI come file:/data/config.yaml
.
Dovrai scrivere un'app Spring Boot che accederà ai file archiviati in Cloud Storage utilizzando l'astrazione Resource di Spring e il prefisso del protocollo gs:
.
Puoi farlo utilizzando Cloud Shell e lo strumento a riga di comando gcloud di Cloud SDK.
Cosa imparerai a fare:
- Come utilizzare Cloud Storage Spring Boot starter
- Come accedere ai file in Cloud Storage con Spring
- Come utilizzare le astrazioni
Resource
eWritableResource
di Spring
Che cosa ti serve
- Un progetto Google Cloud
- Un browser, come Google Chrome
- Familiarità con gli editor di testo standard di Linux, ad esempio Vim, Emacs e GNU Nano
Come utilizzerai il codelab?
Come giudichi la tua esperienza con la creazione di app web HTML e CSS?
Come giudichi la tua esperienza con l'utilizzo dei servizi Google Cloud?
2. Configurazione e requisiti
Configurazione automatica dell'ambiente
Se non hai ancora un Account Google (Gmail o Google Apps), devi crearne uno. Accedi alla console di Google Cloud Platform (console.cloud.google.com) e crea un nuovo progetto.
Ricorda l'ID progetto, un nome univoco in tutti i progetti Google Cloud (il nome sopra riportato è già stato utilizzato e non funzionerà per te). Vi verrà fatto riferimento più avanti in questo codelab come PROJECT_ID
.
Il prossimo passaggio consiste nell'attivare la fatturazione in Cloud Console per utilizzare le risorse di Google Cloud.
L'esecuzione di questo codelab non dovrebbe costare più di qualche euro, ma potrebbe essere di più se decidi di utilizzare più risorse o se le lasci in esecuzione (vedi la sezione "pulizia" alla fine di questo documento).
I nuovi utenti di Google Cloud Platform sono idonei per una prova senza costi di 300 $.
Cloud Shell
Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud.
Attiva Google Cloud Shell
Nella console di GCP, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:
Quindi fai clic su "Start Cloud Shell":
Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente:
Questa macchina virtuale è dotata di tutti gli strumenti di sviluppo di cui hai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Gran parte del lavoro in questo lab, se non tutto, può essere svolto semplicemente con un browser o con Google Chromebook.
Una volta connesso a Cloud Shell, dovresti vedere che sei già autenticato e che il progetto è già impostato sul tuo PROJECT_ID.
Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
Output comando
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
In caso contrario, puoi impostarlo con questo comando:
gcloud config set project <PROJECT_ID>
Output comando
Updated property [core/project].
3. Creare un file in Cloud Storage
Dopo l'avvio di Cloud Shell, puoi iniziare a creare file e trasferirli su Cloud Storage.
Crea un file denominato my-file.txt
:
$ echo "Hello World from GCS" > my-file.txt
Quindi, crea un nuovo bucket univoco in Cloud Storage e trasferisci il file lì utilizzando gsutil
.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
Vai al browser di archiviazione in Cloud Storage e verifica che il bucket e il file siano presenti.
4. Inizializza un'app Spring Boot
Inizia a scrivere l'app utilizzando la riga di comando per generare una nuova app Spring Boot con Spring Initializr:
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
Tieni presente che Initializr aggiungerà automaticamente spring-boot-starter-web
e spring-cloud-gcp-starter-storage
alle tue dipendenze in pom.xml
dell'app modello.
Passa alla directory dell'app modello:
$ cd spring-gcs
Crea ed esegui l'app utilizzando Maven.
$ ./mvnw spring-boot:run
L'app inizierà ad ascoltare la porta 8080. Apri una nuova scheda di Cloud Shell ed esegui curl
per accedere all'app.
$ curl localhost:8080
Dovresti ricevere una risposta 404 perché l'app non fa ancora nulla di utile. Torna alla scheda Cloud Shell precedente in cui è in esecuzione l'app e terminala con Control+C
(Command+C
su Macintosh).
5. Leggere il file in Cloud Storage
Modifica l'app Spring Boot per accedere a my-file.txt
, il file archiviato in precedenza in Cloud Storage. Il tuo obiettivo è restituire semplicemente i contenuti del file tramite HTTP.
Nelle istruzioni seguenti, utilizzerai Vim per modificare i file, ma puoi anche usare Emacs, GNU Nano o l'editor di codice integrato in Cloud Shell:
$ cd ~/spring-gcs
Aggiungi un controller REST GcsController
all'app.
$ vi src/main/java/com/example/demo/GcsController.java
Incolla il codice seguente e non dimenticare di correggere l'URI della risorsa con il bucket che hai creato in precedenza. Puoi controllare il bucket eseguendo il comando 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.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";
}
}
Crea ed esegui l'app con Maven:
$ ./mvnw spring-boot:run
L'app inizia ad ascoltare la porta 8080. Apri una nuova scheda di Cloud Shell ed esegui curl
per accedere all'app.
$ curl localhost:8080
Ora dovresti vedere che i contenuti del file sono stati restituiti dall'app. Vai alla scheda Cloud Shell precedente in cui è in esecuzione l'app e terminala con Control+C
(Command+C
su Macintosh).
6. Scrivi in un file in Cloud Storage
Hai letto i contenuti del file in Cloud Storage e lo hai esposto tramite un controller REST Spring. Adesso cambia i contenuti del file pubblicando i nuovi contenuti nello stesso endpoint HTTP.
Devi aggiungere un altro metodo a GcsController
che risponda a HTTP POST e scriva i dati nel tuo file in Cloud Storage. Questa volta, trasmetti la primavera Resource
a WritableResource
.
Aggiorna il file GcsController
con importazioni aggiuntive di cui hai bisogno.
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;
Aggiungi il nuovo metodo di endpoint al controller.
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";
}
...
}
Crea ed esegui l'app con Maven:
$ ./mvnw spring-boot:run
L'app inizia ad ascoltare la porta 8080. Apri una nuova scheda di Cloud Shell ed esegui curl
per pubblicare un messaggio nell'app.
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
Dovresti visualizzare una conferma dell'aggiornamento dei contenuti del file. Tuttavia, per verificarlo, utilizza un GET
.
$ curl localhost:8080
Dovresti vedere i contenuti aggiornati del file restituito dall'app. Torna alla scheda Cloud Shell precedente in cui l'app è in esecuzione e termina con Control+C
(Command+C
su Macintosh).
7. Complimenti!
Hai imparato a utilizzare l'astrazione Resource di Spring per accedere facilmente ai file in Cloud Storage. Hai scritto un'app web Spring Boot in grado di leggere e scrivere su un file in Cloud Storage. Hai anche appreso lo starter Spring Boot per Cloud Storage che abilita tale funzionalità.
Scopri di più
- Cloud Storage
- Progetto Google Cloud di primavera
- Primavera sul repository GitHub di Google Cloud
- Java su Google Cloud
Licenza
Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.