1. Présentation
Spring Framework fournit une abstraction ResourceLoader pour lire et écrire facilement des fichiers à partir de différentes sources, telles que le système de fichiers, le classpath ou le Web. Il vous suffit de spécifier l'URI de la ressource à l'aide du préfixe de protocole connu. Par exemple, pour accéder à un fichier sur le système de fichiers local, vous spécifiez un URI tel que file:/data/config.yaml.
Vous allez créer une application Spring Boot qui accédera aux fichiers stockés dans Cloud Storage à l'aide de Spring Resource Abstraction et du préfixe de protocole gs:.
Pour ce faire, vous utiliserez Cloud Shell et l'outil de ligne de commande gcloud du SDK Cloud.
Points abordés
- Comment utiliser le starter Spring Boot pour Cloud Storage
- Comment accéder aux fichiers dans Cloud Storage avec Spring
- Comment utiliser les abstractions
ResourceetWritableResourcede Spring
Prérequis
- Un projet Google Cloud
- Un navigateur, tel que Google Chrome
- Connaissance des éditeurs de texte Linux standards, tels que Vim, Emacs et GNU Nano
Comment allez-vous utiliser cet atelier de programmation ?
Quel est votre niveau d'expérience en matière de création d'applications Web HTML et CSS ?
Quel est votre niveau d'expérience avec les services Google Cloud ?
2. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à Cloud Console, puis créez un projet ou réutilisez un projet existant. (Si vous n'avez pas encore de compte Gmail ou G Suite, vous devez en créer un.)
Mémorisez l'ID du projet. Il s'agit d'un nom unique permettant de différencier chaque projet Google Cloud (le nom ci-dessus est déjà pris ; vous devez en trouver un autre). Il sera désigné par le nom PROJECT_ID tout au long de cet atelier de programmation.
- Vous devez ensuite activer la facturation dans Cloud Console pour pouvoir utiliser les ressources Google Cloud.
L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Veillez à suivre les instructions de la section "Nettoyer" qui indique comment désactiver les ressources afin d'éviter les frais une fois ce tutoriel terminé. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.
Cloud Shell
Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud.
Activer Cloud Shell
- Dans Cloud Console, cliquez sur Activer Cloud Shell
.
Si vous n'avez encore jamais démarré Cloud Shell, un écran intermédiaire s'affiche en dessous de la ligne de séparation pour décrire de quoi il s'agit. Si tel est le cas, cliquez sur Continuer (cet écran ne s'affiche qu'une seule fois). Voici à quoi il ressemble :
Le provisionnement et la connexion à Cloud Shell ne devraient pas prendre plus de quelques minutes.
Cette machine virtuelle contient tous les outils de développement nécessaires. Elle intègre un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances réseau et l'authentification. Vous pouvez réaliser une grande partie, voire la totalité, des activités de cet atelier dans un simple navigateur ou sur votre Chromebook.
Une fois connecté à Cloud Shell, vous êtes en principe authentifié et le projet est défini avec votre ID de projet.
- Exécutez la commande suivante dans Cloud Shell pour vérifier que vous êtes authentifié :
gcloud auth list
Résultat de la commande
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
Résultat de la commande
[core] project = <PROJECT_ID>
Si vous obtenez un résultat différent, exécutez cette commande :
gcloud config set project <PROJECT_ID>
Résultat de la commande
Updated property [core/project].
3. Créer un fichier dans Cloud Storage
Une fois Cloud Shell lancé, vous pouvez commencer à créer des fichiers et à les transférer vers Cloud Storage.
Créez un fichier nommé my-file.txt :
$ echo "Hello World from GCS" > my-file.txt
Créez ensuite un bucket unique dans Cloud Storage et transférez-y le fichier à l'aide de gsutil.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
4. Initialiser une application Spring Boot
Commencez à écrire l'application à l'aide de la ligne de commande pour générer une application Spring Boot avec 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 -
Notez qu'Initializr ajoute automatiquement spring-boot-starter-web et spring-cloud-gcp-starter-storage à vos dépendances dans le fichier pom.xml de l'application de modèle.
Accédez au répertoire de l'application de modèle :
$ cd spring-gcs
Assurez-vous que JAVA_HOME est défini sur la bonne version du JDK :
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Créez et exécutez l'application à l'aide de Maven.
$ ./mvnw spring-boot:run
L'application commence à écouter sur le port 8080. Ouvrez un nouvel onglet Cloud Shell et exécutez curl pour accéder à l'application.
$ curl localhost:8080
Vous devriez obtenir une réponse 404, car l'application n'est pas encore utile.
Revenez à l'onglet Cloud Shell précédent où l'application est en cours d'exécution et arrêtez-la avec Control+C (Command+C sur Macintosh).
5. Lire le fichier dans Cloud Storage
Modifiez votre application Spring Boot pour accéder à my-file.txt, le fichier que vous avez précédemment stocké dans Cloud Storage. Votre objectif est de renvoyer simplement le contenu du fichier via HTTP.
Dans les instructions suivantes, vous utiliserez Vim pour modifier les fichiers, mais vous pouvez également utiliser Emacs, GNU Nano ou l'éditeur de code intégré dans Cloud Shell :

$ cd ~/spring-gcs
Ajoutez un contrôleur REST GcsController à l'application.
$ vi src/main/java/com/example/demo/GcsController.java
Collez le code suivant et n'oubliez pas de corriger l'URI de la ressource avec le bucket que vous avez créé précédemment. Vous pouvez vérifier le bucket en exécutant la commande 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());
}
}
Créez et exécutez l'application avec Maven :
$ ./mvnw spring-boot:run
L'application commence à écouter sur le port 8080. Ouvrez un nouvel onglet Cloud Shell et exécutez curl pour accéder à l'application.
$ curl localhost:8080
Vous devriez maintenant voir que le contenu du fichier est renvoyé par l'application. Accédez à l'onglet Cloud Shell précédent où l'application est en cours d'exécution et arrêtez-la avec Control+C (Command+C sur Macintosh).
6. Écrire dans le fichier dans Cloud Storage
Vous avez lu le contenu du fichier dans Cloud Storage et l'avez exposé via un contrôleur REST Spring. Modifiez maintenant le contenu du fichier en publiant le nouveau contenu du fichier sur le même point de terminaison HTTP.
Vous devez ajouter une autre méthode à GcsController qui répondra à HTTP POST et écrira les données dans votre fichier dans Cloud Storage. Cette fois, transtypez le Spring Resource en WritableResource.
Mettez à jour le GcsController avec les importations supplémentaires dont vous avez besoin.
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;
Ajoutez la nouvelle méthode de point de terminaison au contrôleur.
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";
}
...
}
Créez et exécutez l'application avec Maven :
$ ./mvnw spring-boot:run
L'application commence à écouter sur le port 8080. Ouvrez un nouvel onglet Cloud Shell et exécutez curl pour publier un message dans l'application.
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
Vous devriez voir une confirmation indiquant que le contenu du fichier a été mis à jour. Toutefois, vérifiez-le en effectuant une requête GET.
$ curl localhost:8080
Vous devriez voir le contenu mis à jour du fichier renvoyé par l'application. Revenez à l'onglet Cloud Shell précédent où l'application est en cours d'exécution et arrêtez-la avec Control+C (Command+C sur Macintosh).
7. Félicitations !
Vous avez appris à utiliser l'abstraction Spring Resource pour accéder facilement aux fichiers dans Cloud Storage. Vous avez créé une application Web Spring Boot qui peut lire et écrire dans un fichier dans Cloud Storage. Vous avez également découvert le starter Spring Boot pour Cloud Storage qui active cette fonctionnalité.
En savoir plus
- Cloud Storage
- Spring Framework sur Google Cloud
- Dépôt GitHub Spring sur Google Cloud
- Java sur Google Cloud
Licence
Ce document est publié sous une licence Creative Commons Attribution 2.0 Generic.