Nouveau : Datasets open source gratuits disponibles !Decouvrir →
☁️
Intermediaire 25 min Spring Boot

Deployer Spring Boot sur GCP

Pourquoi Deployer Spring Boot sur GCP ?

L'infrastructure en nuage a révolutionné la façon dont les développeurs déployent, gèrent et scalent leurs applications. Google Cloud Platform (GCP) est l'un des leaders mondiaux dans ce domaine. En déployant une application Spring Boot sur GCP, vous pouvez bénéficier de nombreux avantages : une haute disponibilité, un scale-out facile, des services intégrés tels que le stockage et la base de données, ainsi qu'une sécurité accrue. Cela permet à votre entreprise d'être plus flexible et compétitive sur le marché.

Un cas concret est le déploiement d'un système de gestion de contenu pour une entreprise avec plusieurs sites Web. En utilisant GCP, vous pouvez centraliser les ressources et la maintenance de l'infrastructure, ce qui permet aux équipes métier de se concentrer sur le développement des fonctionnalités.

Prerequis

  • Connaissance approfondie du framework Spring Boot.
  • Compréhension des concepts fondamentaux d'architecture en nuage (IAAS, PAAS).
  • Familiarité avec les services GCP comme Compute Engine, Cloud Storage et Cloud SQL.
  • Environnement de développement Java installé.

Concepts fondamentaux

1. Compute Engine

Ce service vous permet de provisionner des instances virtuelles dans le cloud. Vous pouvez choisir la machine virtuelle appropriée en fonction des besoins de votre application (type d'instance, configuration du système d'exploitation, etc.).

## schema mental : Compute Engine instance

2. Cloud Storage

Il s'agit d'un stockage object basé sur le cloud qui vous permet de stocker et accéder à des données de manière facile et rapide.

## schema mental : Cloud Storage bucket

3. Cloud SQL

Ce service vous permet de déployer, gérer et protéger une base de données relationnelle dans le cloud.

## schema mental : Cloud SQL database instance

Mise en pratique : projet fil rouge

Nous allons construire un simple système d'API REST pour un blog. Cet API permettra aux utilisateurs de créer, lire, mettre à jour et supprimer des articles de blog.

Étape 1 : Création du projet Spring Boot

## Installer le SDK Java et Maven si ce n'est pas déjà fait
$ sdk install java 20-open
$ sdk install maven

## Créer un nouveau projet Spring Boot
$ mvn archetype:generate -DgroupId=com.example -DartifactId=springblog -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

## Naviguer dans le répertoire du projet
$ cd springblog

Étape 2 : Ajout des dépendances dans pom.xml

<!-- Ajouter les dépendances nécessaires -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.cloud.sql</groupId>
        <artifactId>mysql-socket-factory</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

Étape 3 : Création de l'entité Article dans src/main/java/com/example/springblog/entity/Article.java

// Entité JPA représentant un article
package com.example.springblog.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "articles")
public class Article {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String content;

    // Getters et Setters
}

Étape 4 : Création du Repository ArticleRepository dans src/main/java/com/example/springblog/repository/ArticleRepository.java

// Interface JPA pour les opérations CRUD sur l'entité Article
package com.example.springblog.repository;

import com.example.springblog.entity.Article;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ArticleRepository extends JpaRepository<Article, Long> {
}

Étape 5 : Création du Controller ArticleController dans src/main/java/com/example/springblog/controller/ArticleController.java

// Contrôleur REST pour gérer les opérations sur l'API des articles
package com.example.springblog.controller;

import com.example.springblog.entity.Article;
import com.example.springblog.repository.ArticleRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/articles")
public class ArticleController {

    @Autowired
    private ArticleRepository articleRepository;

    @GetMapping
    public List<Article> getAllArticles() {
        return articleRepository.findAll();
    }

    @PostMapping
    public Article createArticle(@RequestBody Article article) {
        return articleRepository.save(article);
    }

    @GetMapping("/{id}")
    public Article getArticleById(@PathVariable Long id) {
        return articleRepository.findById(id).orElseThrow(() -> new RuntimeException("Article not found"));
    }

    @PutMapping("/{id}")
    public Article updateArticle(@PathVariable Long id, @RequestBody Article articleDetails) {
        Article article = articleRepository.findById(id).orElseThrow(() -> new RuntimeException("Article not found"));
        article.setTitle(articleDetails.getTitle());
        article.setContent(articleDetails.getContent());
        return articleRepository.save(article);
    }

    @DeleteMapping("/{id}")
    public void deleteArticle(@PathVariable Long id) {
        articleRepository.deleteById(id);
    }
}

Étape 6 : Configuration de la base de données dans application.properties

## Configurer les propriétés pour la connexion à Cloud SQL
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update

Étape 7 : Création du fichier de configuration pour Cloud SQL dans src/main/resources/application-cloudsql.properties

## Configurer les propriétés pour la connexion à Cloud SQL via socket
spring.datasource.url=jdbc:mysql://:/mydatabase?useSSL=false&serverTimezone=UTC&socketFactory=com.google.cloud.sql.mysql.SocketFactory&cloudSqlInstance=my-instance:us-central1:my-database&unixSocketPath=/cloudsql/my-instance:us-central1:my-database
spring.datasource.username=root
spring.datasource.password=password

Étape 8 : Déploiement sur GCP

  1. Créer un projet sur GCP et configurer l'authentification avec gcloud auth login.
  2. Installer le SDK Cloud SDK.
  3. Configurer le projet GCP dans votre environnement local :
$ gcloud config set project your-project-id
  1. Initialiser le déploiement sur App Engine :
$ mvn appengine:deploy -Dappengine.appVersion=1.0
  1. Accéder à votre application via le navigateur.

Erreurs frequentes et debugging

1. Erreur de connexion à la base de données

## ❌ Mauvais
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC

## ✅ Correct
spring.datasource.url=jdbc:mysql://:/mydatabase?useSSL=false&serverTimezone=UTC&socketFactory=com.google.cloud.sql.mysql.SocketFactory&cloudSqlInstance=my-instance:us-central1:my-database&unixSocketPath=/cloudsql/my-instance:us-central1:my-database

2. Erreur de configuration du repository

## ❌ Mauvais
public interface ArticleRepository extends JpaRepository<Article, Long> {
    List<Article> findAll();
}

## ✅ Correct
import org.springframework.data.jpa.repository.JpaRepository;

public interface ArticleRepository extends JpaRepository<Article, Long> {
}

3. Erreur de configuration du controlleur

## ❌ Mauvais
@RestController
@RequestMapping("/api/articles")
public class ArticleController {

    @Autowired
    private ArticleRepository articleRepository;

    @GetMapping
    public List<Article> getAllArticles() {
        return articleRepository.findAll();
    }

    // Autres méthodes...
}

## ✅ Correct
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/articles")
public class ArticleController {

    @Autowired
    private ArticleRepository articleRepository;

    @GetMapping
    public List<Article> getAllArticles() {
        return articleRepository.findAll();
    }

    // Autres méthodes...
}

Pour aller plus loin

  1. Intégration avec Cloud Pub/Sub pour la gestion des événements asynchrones.
  2. Utilisation de Cloud Functions pour déployer une API serverless.
  3. Mise en place de CI/CD avec Google Cloud Build et Cloud Source Repositories.

Défi pratique

Développez un simple service client CLI qui utilise l'API REST créée précédemment pour créer, lire, mettre à jour et supprimer des articles de blog.

Besoin d'aide sur Spring Boot ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Quel est le prérequis pour déployer une application Spring Boot sur Google Cloud Platform (GCP) ?
Pour déployer une application Spring Boot sur GCP, vous devez avoir un compte GCP actif et installer les outils de ligne de commande gcloud.
Comment configurer le fichier `application.properties` pour une application Spring Boot déployée sur GCP ?
Pour une application Spring Boot sur GCP, vous pouvez configurer le fichier `application.properties` avec les paramètres appropriés pour l'environnement cloud, comme la base de données et le stockage.
Quelle est la meilleure pratique pour optimiser les performances d'une application Spring Boot déployée sur GCP ?
Pour optimiser les performances, vous pouvez utiliser des instances GCP adaptées à vos besoins, activer les fonctions de mise à l'échelle automatique et optimiser votre code pour une meilleure performance.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.