Connecter une application Spring Boot à Cloud SQL

1. Avant de commencer

Cloud SQL est un service de base de données entièrement géré qui facilite la configuration, la maintenance, la gestion et l'administration de vos bases de données relationnelles sur Google Cloud. Vous pouvez utiliser Cloud SQL avec Cloud SQL pour MySQL ou Cloud SQL pour PostgreSQL.

Dans cet atelier de programmation, vous allez apprendre à configurer une instance Cloud SQL pour MySQL, puis à mettre à jour une application Spring Boot afin qu'elle utilise l'instance Cloud SQL comme espace de stockage backend. Spring Boot Starter pour Google Cloud SQL fournit une DataSource automatiquement configurée pour vous permettre de profiter facilement de Cloud SQL en modifiant très peu votre code. Cet atelier de programmation utilise le code source de Spring Petclinic.

Prérequis

  • Connaissance des outils et du langage de programmation Java
  • Connaissance des éditeurs de texte Linux standards tels que Vim, Emacs et nano

Objectifs de l'atelier

  • Utilisez Cloud SQL dans votre application Spring Boot.

Prérequis

2. Préparation

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
  • L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet.
  • Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.

Activer Cloud Shell

  1. Dans Cloud Console, cliquez sur Activer Cloud Shell 853e55310c205094.png.

55efc1aaa7a4d3ad.png

Si vous démarrez Cloud Shell pour la première fois, un écran intermédiaire vous explique de quoi il s'agit. Si un écran intermédiaire vous s'est présenté, cliquez sur Continue (Continuer).

9c92662c6a846a5c.png

Le provisionnement et la connexion à Cloud Shell ne devraient pas prendre plus de quelques minutes.

9f0e51b578fecce5.png

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute dans Google Cloud, ce qui améliore considérablement les performances du réseau et l'authentification. Une grande partie, voire la totalité, de votre travail dans cet atelier de programmation peut être effectué dans un navigateur.

Une fois connecté à Cloud Shell, vous êtes authentifié et le projet est défini sur votre ID de projet.

  1. 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`
  1. Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet:
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. Configurer une instance Cloud SQL pour MySQL

  1. Après le lancement de Cloud Shell, vous pouvez créer une instance Cloud SQL à l'aide de la ligne de commande:
$ gcloud sql instances create my-instance

Une fois cette opération terminée, votre instance sera prête à être utilisée.

  1. Créez maintenant une base de données que vous utiliserez pour l'application Petclinic:
$ gcloud sql databases create petclinic --instance my-instance

Vous pouvez également accéder à l'instance et la configurer via la console Cloud.

  1. Obtenez le nom de la connexion à l'instance au format project-id:zone-id:instance-id en exécutant la commande suivante. Vous l'utiliserez plus tard dans la configuration de votre application Spring Boot.
$ gcloud sql instances describe my-instance | grep connectionName

4. Cloner et tester l'application Petclinic en local

  1. Vous allez maintenant cloner l'application Petclinic en local.
$ git clone https://github.com/spring-projects/spring-petclinic

$ cd spring-petclinic
  1. Assurez-vous que la bonne version de Java est définie et exécutez l'application Petclinic en local.
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

$ ./mvnw spring-boot:run
  1. Cliquez sur Aperçu sur le Web1a94d5bd10bfc072.png dans Cloud Shell , puis sélectionnez Prévisualiser sur le port 8080.

3aca52f76c6c22a3.png

Vous devriez voir la page d'accueil de Petclinic comme indiqué ici dans votre navigateur:

34e0d4f1e1765560.png

  1. Jouez et ajoutez des données. L'application utilise une base de données HyperSQL en mémoire. Vous allez maintenant passer d'HyperSQL à Cloud SQL comme base de données.

5. Utiliser Cloud SQL dans Petclinic

Mettez à jour le fichier Maven pom.xml

Mettez à jour le fichier pom.xml comme indiqué ici. Le déclencheur fournit un objet DataSource automatiquement configuré pour se connecter à votre base de données Cloud SQL. Vous pouvez utiliser Vim, nano ou Emacs pour modifier le fichier.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
    ...
    <!-- Add Spring Cloud GCP Dependency BOM -->
    <dependencyManagement>
        <dependencies>
          <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>spring-cloud-gcp-dependencies</artifactId>
          <version>4.1.4</version>
          <type>pom</type>
          <scope>import</scope>
          </dependency>
      </dependencies>
    </dependencyManagement>
    <dependencies>
      ...
      <!-- Add CloudSQL Starter for MySQL -->
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
      </dependency>
      ...
    </dependencies>
</project>

Mettre à jour application-mysql.properties

  1. Remplacez le contenu de src/main/resources/application-mysql.properties par les propriétés suivantes. Vous devez définir le nom de connexion de l'instance à l'étape précédente.

src/main/resources/application-mysql.properties

database=mysql

spring.cloud.gcp.sql.database-name=petclinic
spring.cloud.gcp.sql.instance-connection-name=YOUR_CLOUD_SQL_INSTANCE_CONNECTION_NAME

# Initialize the database since the newly created Cloud SQL database has no tables. The following flag is for Spring Boot 2.5+.
spring.sql.init.mode=always  

  1. Enfin, activez un profil Cloud SQL pour MySQL dans l'application Spring Boot en ajoutant mysql à application.properties. Propriété spring.profiles.active:

src/main/resources/application.properties

# Keep the content of the file the same
...

# In the last line, add mysql to the spring.profiles.active property
spring.profiles.active=mysql

6. Exécuter l'application dans Cloud Shell

  1. Vous pouvez démarrer l'application Spring Boot normalement avec le plug-in Spring Boot:
$ ./mvnw -DskipTests spring-boot:run
  1. Une fois que l'application a démarré, cliquez sur Aperçu sur le Web1a94d5bd10bfc072.png dans la barre d'outils Cloud Shell, puis sélectionnez Prévisualiser sur le port 8080.

3aca52f76c6c22a3.png

Vous devriez voir à nouveau la page d'accueil de Spring Petclinic, comme illustré ici dans votre navigateur:

34e0d4f1e1765560.png

  1. Ajoutez une entrée de propriétaire d'animal.

(Facultatif) Vérifier que Cloud SQL a conservé les données

Vous pouvez vérifier que les données que vous avez saisies ont été conservées dans Cloud SQL, comme indiqué ici. Appuyez sur Entrée lorsque vous êtes invité à entrer un mot de passe.

$ gcloud sql connect my-instance -u root
Whitelisting your IP for incoming connection for 5 minutes...done.
Enter password: <Press Enter, there is no password by default>
...
mysql> use petclinic;
mysql> select * from owners;

Facultatif: Supprimer l'instance Cloud SQL

Une fois votre application arrêtée, vous pouvez supprimer l'instance Cloud SQL à l'aide de la commande suivante:

$ gcloud sql instances delete my-instance

7. Félicitations

Vous avez appris à vous connecter à Cloud SQL dans votre application Spring Boot.

En savoir plus