1. Présentation
Le framework Spring fournit une abstraction ResourceLoader
pour lire et écrire facilement des fichiers à partir de différentes sources, telles que le système de fichiers, le chemin de classe ou le Web. Il vous suffit de spécifier l'URI de la ressource à l'aide du préfixe de protocole bien connu. Par exemple, pour accéder à un fichier sur le système de fichiers local, vous devez spécifier un URI tel que file:/data/config.yaml
.
Vous allez écrire une application Spring Boot qui accédera aux fichiers stockés dans Cloud Storage à l'aide de l'abstraction Spring Resource et du préfixe de protocole gs:
.
Pour ce faire, vous utiliserez Cloud Shell et l'outil de ligne de commande gcloud de Cloud SDK.
Points abordés
- Utiliser le déclencheur Spring Boot de Cloud Storage
- Accéder aux fichiers dans Cloud Storage avec Spring
- Utiliser les abstractions
Resource
etWritableResource
de Spring
Prérequis
- Un projet Google Cloud
- Un navigateur tel que Google Chrome
- Bonne connaissance des éditeurs de texte Linux standards tels que Vim, Emacs et GNU Nano
Comment allez-vous utiliser l'atelier de programmation ?
<ph type="x-smartling-placeholder">Comment évalueriez-vous votre 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 ?
<ph type="x-smartling-placeholder">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 gratuite. 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 vous servir de 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
Accédez au navigateur de stockage dans Cloud Storage, puis vérifiez que le bucket et le fichier sont présents.
4. Initialiser une application Spring Boot
Commencez à écrire l'application en utilisant la ligne de commande pour générer une nouvelle 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 pom.xml
du modèle d'application.
Accédez au répertoire du modèle d'application:
$ 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 commencera à é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'a encore rien d'utile.
Revenez à l'onglet Cloud Shell précédent où l'application s'exécute et fermez-la avec Control+C
(Command+C
sous 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 simplement de renvoyer le contenu du fichier via HTTP.
Dans les instructions suivantes, vous utiliserez Vim pour modifier les fichiers, mais vous pouvez également vous servir d'Emacs, de GNU Nano ou de l'éditeur de code intégré à 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 remplacer l'URI de la ressource par 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 constater que le contenu du fichier renvoyé par l'application doit s'afficher. Accédez à l'onglet Cloud Shell précédent où l'application s'exécute et fermez-la avec Control+C
(Command+C
sur Macintosh).
6. Écrire dans le fichier stocké dans Cloud Storage
Vous avez lu le contenu du fichier dans Cloud Storage et vous l'avez exposé via un contrôleur REST Spring. À présent, modifiez le contenu du fichier en publiant le contenu du nouveau fichier sur le même point de terminaison HTTP.
Vous devez ajouter une autre méthode à GcsController
qui répond à la requête HTTP POST et écrit les données dans votre fichier dans Cloud Storage. Cette fois-ci, castez l'Resource
du printemps sur WritableResource
.
Mettez à jour 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
Un message de confirmation indiquant que le contenu du fichier a été mis à jour doit s'afficher. Cependant, vérifiez cela en exécutant une commande 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 s'exécute et fermez-la avec Control+C
(Command+C
sous Macintosh).
7. Félicitations !
Vous avez appris à utiliser l'abstraction Spring Resource pour accéder facilement aux fichiers dans Cloud Storage. Vous avez écrit une application Web Spring Boot capable de lire et d'écrire dans un fichier dans Cloud Storage. Vous avez également découvert le déclencheur Spring Boot pour Cloud Storage, qui active cette fonctionnalité.
En savoir plus
- Cloud Storage
- Framework Spring 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.