Comment créer un projet Spring Boot ?

Voici une brève présentation de Spring Boot avec une explication des concepts fondamentaux et un exemple concret d’application pour bien débuter sur Spring Boot. Cet article s’appuie en grande partie sur la présentation Devoxx 2015 réalisée par Stéphane Nicoll et Brian Clozel, tous deux membres de l’équipe Spring Framework de Pivotal. Cette vidéo de présentation est disponible ici. Bonne lecture.

Prérequis

Création d’un projet

Pour créer un nouveau projet Spring Boot :

  • Vous pouvez générer un projet Spring Boot facilement et rapidement à l’aide d’un formulaire via une interface web ergonomique sur http://start.spring.io.
  • Vous pouvez également vous rendre sur Eclipse STS, faire un « New », « Spring Starter Project ».

Dans les 2 cas, vous devrez configurez les informations de l’artifact, donnez un nom à votre projet et choisir les starters correspondant aux fonctionnalités que vous voulez mettre en place dans votre projet. Les autres paramètres peuvent être laissez par défaut.

Architecture d’un projet

- /src
  - /main
    - /java : contenant tous les fichiers java de votre projet
    - /ressources
      - /static : contenant les fichiers web statiques (css, js...)
      - /templates : contenant les vues (html, php, jsp...)
      - application.properties : fichier de configuration de votre application 
  - /test
    - /java : contenant vos classes de tests (unitaire, intégration...)
- /target : contenant les différents fichiers générés après un build maven 
- pom.xml : fichier de configuration Maven de votre projet 

Lancement d’un projet

Pour tester votre application, il suffit de lancer un simple « Run as Java Application » sur le fichier contenant la méthode main de votre projet.

Exemple d’application Spring Boot

L’application que nous allons développer présentera les caractéristiques suivantes :

  • ce sera une application web
  • elle exposera une API REST
  • elle stockera les données dans une base de données H2
  • elle persistera les données stockées
  • elle proposera un accès sécurisé aux opérations REST
  • elle sera testée avec des tests d’intégration
  • elle proposera des fonctionnalités d’administration
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.test.devoxx</groupId>
    <artifactId>devoxx</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <start-class>demo.DemoApplication</start-class>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!-- pour faire une application web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- pour faire des tests d'intégration -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- pour faire de la persistance de données -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- une base de données H2 pour le stockage des données -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- pour exposer une API REST -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <!-- pour sécuriser l'accès à l'application -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <!-- pour accéder aux features administratives de l'application -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

Sources

Leave a Comment