Configurez votre projet Java

Dans le chapitre précédent, vous avez pu :

  1. Installer la base de données MySQL.

  2. GĂ©nĂ©rer la structure minimale du projet, et l’importer dans votre IDE.

Ce chapitre vous permettra de connecter l’application Java Ă  la base de donnĂ©es. Ce lien que nous allons crĂ©er entre les 2 est facilitĂ© par Spring Boot et Spring Data JPA.

L’une des caractĂ©ristiques de Spring Boot est de favoriser la configuration pour rĂ©duire la quantitĂ© de code Ă  Ă©crire. De ce fait, pour connecter la base de donnĂ©es avec Spring Boot, il vous suffira d’écrire de la configuration. Vous n’aurez pas de code Ă  implĂ©menter.

Configurez et testez votre projet

Lors de la génération de la structure minimale du projet, le répertoire /src/main/resources contient un fichier par défaut nommé applications.properties.

Ce fichier est considĂ©rĂ© par Spring comme Ă©tant une source de propriĂ©tĂ©s. Cela signifie qu’au dĂ©marrage de l’application, ce fichier sera lu, et les informations prĂ©sentes pourront ĂȘtre exploitĂ©es par le code de l’application.

En l’occurrence, la documentation de Spring nous apprend qu’en fournissant certaines propriĂ©tĂ©s, le framework exĂ©cutera le code nĂ©cessaire Ă  la connexion de la base de donnĂ©es. Il s’agit concrĂštement d’ouvrir une connexion JDBC sĂ©curisĂ©e vers la base de donnĂ©es.

TrÚs bien, donc pas de code mais des propriétés. Lesquelles exactement ??

Sachez tout d’abord qu’il en existe de trĂšs nombreuses (si vous avez fait un tour sur le lien de la documentation, vous avez dĂ» vous en rendre compte ) ; donc je vais vous montrer le minimum nĂ©cessaire.

Retrouvez-moi dans le screencast ci-dessous :

Voici le fichier que nous avons obtenu lors du screencast :

spring.datasource.url=jdbc:mysql://localhost:3306/carlib?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

Reprenons une à une les propriétés que je vous ai présentées :

  • spring.datasource.url : Nous indiquons ici l’URL de connexion Ă  la base de donnĂ©es. Cette URL possĂšde plusieurs informations clĂ©s, comme :

    jdbc:mysql : le protocole utilisĂ© (un protocole peut ĂȘtre comparĂ© Ă  une langue, c’est un langage que 2 applications vont utiliser pour se comprendre).

    localhost : le ‘host’, c'est-Ă -dire le poste oĂč la base de donnĂ©es est installĂ©e. En l'occurrence, votre base de donnĂ©es Ă©tant sur le mĂȘme poste que l’application que vous dĂ©veloppez, vous pouvez spĂ©cifier ‘localhost’.

    3306 : c’est le port de la base de donnĂ©es sur votre poste. Attention, ce port peut varier selon l’installation rĂ©alisĂ©e.

    /carlib : c’est le nom de la base de donnĂ©es.

    ?serverTimeZone=UTC : ce paramÚtre supplémentaire permet de résoudre une erreur courante avec le driver MySQL.

  • spring.datasource.username : Nom de l’utilisateur pour se connecter Ă  la base de donnĂ©es.

  • spring.datasource.password : Mot de passe de l’utilisateur spĂ©cifiĂ© prĂ©cĂ©demment.

  • spring.jpa.properties.hibernate.dialect : SpĂ©cifie au framework ORM le dialecte SQL Ă  utiliser, cela permet d’optimiser les traitements du framework.

Mais
 mais
 Pourquoi y a-t-il une rĂ©fĂ©rence Ă  Hibernate ? Je croyais qu’on faisait du Spring Data JPA ?

C’est une trĂšs bonne question ! Et je la saisis pour aller un peu plus dans le dĂ©tail de ce framework. Rappelons que les frameworks ORM se basent sur JPA, une spĂ©cification (c'est-Ă -dire des rĂšgles Ă  suivre). Les frameworks vont ensuite implĂ©menter cette spĂ©cification (suivre ces rĂšgles) et fournir un code utilisable.

Hibernate est une implĂ©mentation JPA (tout comme EclipseLink ou OpenJPA). Spring Data JPA n’est pas tout Ă  fait une implĂ©mentation JPA. C’est une autre couche entre la spĂ©cification JPA et une implĂ©mentation JPA. Cela s’appelle une abstraction.

Visuellement, on pourrait représenter cette structure selon une pile comme dans le schéma suivant :

JPA est en haut de la pile, en dessous il y a Spring Data JPA, et enfin le dernier élément le plus bas est Hibernate.
ReprĂ©sentation sous forme de ‘pile’ de JPA/Spring Data JPA/Hibernate

  • JPA est en haut de la pile car c’est la spĂ©cification.

  • Spring Data JPA vient ensuite, c’est un niveau d’abstraction, opĂ©rationnel.

  • Hibernate est une implĂ©mentation, c’est donc le plus bas niveau.

Pourquoi Spring Data JPA existe alors ? Hibernate ne suffit pas ?

Spring Data JPA existe en raison du leitmotiv de Spring : nous simplifier la vie !

Utiliser une implĂ©mentation JPA comme Hibernate n’est pas forcĂ©ment une tĂąche aisĂ©e. Cela demande d’apprĂ©hender beaucoup de codes.

Spring Data JPA vient donc s'interfĂ©rer entre la spĂ©cification JPA et Hibernate pour nous permettre d’utiliser cette implĂ©mentation sans devoir en apprendre toutes ses complexitĂ©s. Et bien Ă©videmment, en maintenant la performance !

Magnifique, non ? 

Maintenant que tout est clair (enfin je l’espĂšre ), nous sommes prĂȘts Ă  tester la connexion Ă  la base de donnĂ©es. Rien de plus simple, nous allons dĂ©marrer notre projet et observer son comportement. Ce dernier nous rĂ©vĂšlera si la connexion Ă  la base de donnĂ©es est opĂ©rationnelle ou non.

Je vous invite à ouvrir un invite de commande, à vous placer dans le répertoire du projet, puis à taper la commande Maven : mvn spring-boot:run.

Si votre configuration est valide, vous devriez obtenir un rĂ©sultat qui ressemble au suivant avec un “BUILD SUCCESS”. 

Dans le cas oĂč la configuration est erronĂ©e ou si la connexion a Ă©chouĂ©, vous aurez un “BUILD FAILURE”.

J’en ai simulĂ© un pour l’exemple, en supprimant toutes les propriĂ©tĂ©s du fichier application.properties :

Je ne peux pas vous simuler tous les cas d’erreurs, mais soyez bien vigilant Ă  l’URL, au nom d’utilisateur et au mot de passe, et bien Ă©videmment Ă  ce que votre base de donnĂ©es soit dĂ©marrĂ©e !

Externalisez les identifiants de connexion

Avant de conclure la premiĂšre partie de ce cours, je vais vous montrer une derniĂšre chose.

Mettons-nous en situation de production. La base de donnĂ©es est en production et l’application Java Ă©galement. 

Jusque lĂ , ça va ! Mais voilĂ , les administrateurs systĂšme vous informent que votre prĂ©cieuse base de donnĂ©es va ĂȘtre dĂ©placĂ©e sur un autre serveur. C’est une catastrophe ! 

Je ne vois pas trop ce qu’il y a de grave là-dedans ?

Bon d’accord, je surrĂ©agis peut-ĂȘtre. Cependant, nous avons bien un problĂšme !

D’accord, mais lequel ?

La mise en production de votre application Spring Boot signifie que vous avez packagĂ© l’application dans un JAR. Ce JAR a ensuite Ă©tĂ© exĂ©cutĂ© sur un serveur de production.

Et ce mĂȘme JAR embarque la configuration d’accĂšs Ă  la base de donnĂ©es ! Si la base de donnĂ©es change de serveur, alors l’URL d’accĂšs devra certainement ĂȘtre mise Ă  jour. Et c’est lĂ  le problĂšme : une fois le JAR construit, on ne peut plus accĂ©der au fichier application.properties qui est embarquĂ© dedans !

Bon certes, alors je modifie le fichier application.properties dans le projet, je re-construis le JAR et je remplace l’ancien, non ?

IdĂ©e valide, oui, mais ne trouvez vous pas que c’est un peu complexe pour une simple mise Ă  jour d’un fichier de propriĂ©tĂ©s ? 

Laissez-moi vous proposer quelque chose de plus efficace ! Un peu avant, je vous avais présenté le fichier application.properties comme étant une source de propriétés pour Spring.

Spring Boot, par défaut, prend en compte de nombreuses autres sources de propriétés, comme :

  • Des arguments via la ligne de commande.

  • Les variables d’environnement.

  • Des fichiers de propriĂ©tĂ©s externes au JAR packagĂ©.

Je vais donc vous montrer comment externaliser la configuration via 2 méthodes :

  1. Avec les variables d’environnement.

  2. Via un fichier de propriétés externes au JAR.

Ces 2 mĂ©thodes font partie des solutions pour Ă©viter de reconstruire le JAR Ă  chaque mise Ă  jour nĂ©cessaire de la configuration (comme lorsqu’on dĂ©place la base de donnĂ©es sur un autre serveur !).

Retrouvez-moi dans le screencast ci-dessous :

Alors, qu’en pensez-vous ? Assez simple, non ?

Je dois reconnaĂźtre que ce genre de facilitĂ© m’a particuliĂšrement fait apprĂ©cier Spring Boot. Ce n’est pas surprenant que ce soit un framework incontournable en Java actuellement !

Reprenons ces 2 méthodes :

Variables d’environnement

Quel que soit votre systĂšme d’exploitation, vous pouvez ajouter de nouvelles variables d’environnement. Dans mon cas, sur Windows j’ai utilisĂ© le menu “Modifier les variables d’environnement systĂšme”. Puis pour tester, j’ai ajoutĂ© une variable nommĂ©e “spring.datasource.password” avec la valeur “root”. Bien Ă©videmment, cela peut ĂȘtre fait avec toutes les propriĂ©tĂ©s.

Et voilĂ , le tour est jouĂ© ! Votre application ira lire les variables d’environnement au dĂ©marrage, et la connexion Ă  la base de donnĂ©es s’effectuera sans problĂšme !

Fichier de propriétés externes au JAR

La documentation de Spring Boot indique que l’on peut placer le fichier application.properties dans un rĂ©pertoire config situĂ© dans le rĂ©pertoire oĂč l’application est exĂ©cutĂ©e.
L’arborescence donnerait alors quelque chose comme :

  • root_folder/

    • config/

      • application.properties

    • dataLayer.jar

Au dĂ©marrage du JAR, l’application ira lire le fichier, et les propriĂ©tĂ©s seront prises en compte. VoilĂ  une excellente façon d’externaliser la configuration. C’est ma prĂ©fĂ©rĂ©e. 

Enfin, il est Ă©galement intĂ©ressant de noter que l’externalisation de la configuration renforce la sĂ©curitĂ© de votre dĂ©veloppement.

Rappelons d’ailleurs que bien souvent, le plus prĂ©cieux au sein d’une application ce n’est pas le code, mais bien les donnĂ©es !

Vous comprenez donc qu’écrire en dur dans le code les informations de connexion Ă  la base de donnĂ©es est une mauvaise pratique ! L’externalisation de la configuration est la solution Ă  cette mauvaise pratique. 

C’est ainsi que nous terminons ce chapitre et la premiùre partie du cours.

En résumé

  • La connexion Ă  la base de donnĂ©es est facilitĂ©e par Spring.

  • La configuration doit contenir au minimum :

    • l'URL ;

    • le nom d'utilisateur du compte BDD ;

    • le mot de passe du compte utilisateur ;

    • le dialecte SQL.

  • La configuration peut ĂȘtre externalisĂ©e en dehors du JAR packagĂ©, par exemple :

    • dans des variables d’environnement ;

    • dans un fichier applications.properties placĂ© dans un rĂ©pertoire config.

Pour apprendre à interagir avec la base de données, suivez-moi dans la deuxiÚme partie du cours ! 

Ever considered an OpenClassrooms diploma?
  • Up to 100% of your training program funded
  • Flexible start date
  • Career-focused projects
  • Individual mentoring
Find the training program and funding option that suits you best