1. Panoramica
Il framework Spring fornisce un'astrazione ResourceLoader
per leggere e scrivere facilmente file da varie origini, come file system, classpath o web. Devi semplicemente specificare l'URI della risorsa utilizzando il prefisso di protocollo noto. Ad esempio, per accedere a un file sul file system locale, devi specificare un URI come file:/data/config.yaml
.
Scriverai un'app di avvio Spring che accederà ai file archiviati in Cloud Storage utilizzando l'astrazione Resource di Spring e il prefisso di protocollo gs:
.
Per farlo, utilizzerai Cloud Shell e lo strumento a riga di comando gcloud di Cloud SDK.
Cosa imparerai a fare
- Come utilizzare il comando iniziale di avvio a molla di Cloud Storage
- 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, ad esempio Google Chrome.
- Familiarità con gli editor di testo standard di Linux, ad esempio Vim, Emacs e GNU Nano.
Come utilizzerai il codelab?
Come valuteresti la tua esperienza con lo sviluppo di app web HTML e CSS?
Come giudichi la tua esperienza di utilizzo dei servizi Google Cloud?
2. Configurazione e requisiti
Configurazione dell'ambiente da seguire in modo autonomo
- Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o G Suite, devi crearne uno.
Ricorda l'ID progetto, un nome univoco in tutti i progetti Google Cloud (il nome precedente è già stato utilizzato e non funzionerà correttamente). Verrà indicato più avanti in questo codelab come PROJECT_ID
.
- Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.
Eseguire questo codelab non dovrebbe costare molto. Assicurati di seguire le istruzioni nella sezione "Pulizia" in cui viene spiegato come arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.
Cloud Shell
Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione su Google Cloud.
Attiva Cloud Shell
- Dalla console Cloud, fai clic su Attiva Cloud Shell .
Se non hai mai avviato Cloud Shell, verrà visualizzata una schermata intermedia (below the fold) in cui viene descritto di cosa si tratta. In tal caso, fai clic su Continua (e non la vedrai più). Ecco come appare quella singola schermata:
Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.
Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Gran parte, se non tutto, del lavoro in questo codelab può essere svolto semplicemente con un browser o Chromebook.
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo ID progetto.
- Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
Output comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
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. Crea un file in Cloud Storage
Dopo il lancio di Cloud Shell, puoi iniziare a creare file e trasferirli in 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 lì il file utilizzando gsutil
.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
Vai al browser Storage in Cloud Storage e verifica che il bucket e il file siano presenti.
4. Inizializzare 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 type=maven-project \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
Tieni presente che l'inizializzazione 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
Assicurati che JAVA_HOME
sia impostato sulla versione JDK corretta:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Crea ed esegui l'app utilizzando Maven.
$ ./mvnw spring-boot:run
L'app inizierà ad ascoltare sulla 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. Leggi il file in Cloud Storage
Modifica l'app Spring Boot in modo che acceda a my-file.txt
, il file che hai archiviato in precedenza in Cloud Storage. L'obiettivo è semplicemente restituire 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.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());
}
}
Crea ed esegui l'app con Maven:
$ ./mvnw spring-boot:run
L'app inizia ad ascoltare sulla porta 8080. Apri una nuova scheda di Cloud Shell ed esegui curl
per accedere all'app.
$ curl localhost:8080
A questo punto 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 nel file in Cloud Storage
Hai letto i contenuti del file in Cloud Storage e lo hai esposto tramite un controller REST Spring. Ora modifica i contenuti del file pubblicando i contenuti del nuovo file sullo stesso endpoint HTTP.
Devi aggiungere a GcsController
un altro metodo che risponda a HTTP POST e scriva i dati nel tuo file in Cloud Storage. Questa volta, trasmetti l'Resource
di primavera in WritableResource
.
Aggiorna GcsController
con le 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;
import org.springframework.web.bind.annotation.PostMapping;
Aggiungi il nuovo metodo endpoint al controller.
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";
}
...
}
Crea ed esegui l'app con Maven:
$ ./mvnw spring-boot:run
L'app inizia ad ascoltare sulla 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 vedere una conferma dell'aggiornamento dei contenuti del file. Tuttavia, verificalo eseguendo un GET
.
$ curl localhost:8080
Dovresti vedere i contenuti aggiornati del file restituito dall'app. Torna alla scheda Cloud Shell precedente in cui è in esecuzione l'app e terminala con Control+C
(Command+C
su Macintosh).
7. Complimenti!
Hai imparato a usare 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 imparato a conoscere il comando iniziale Spring Boot per Cloud Storage che abilita questa funzionalità.
Scopri di più
- Cloud Storage
- Framework di primavera su Google Cloud
- Spring nel 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.