Configurer la BD avec JPA
Notions théoriques
Spring Data JPA et Hibernate
Spring Data JPA est l'équivalent Spring Boot de Doctrine en Symfony. Il simplifie l'accès aux bases de données relationnelles en Java en s'appuyant sur :
- JPA (Jakarta Persistence API) — la spécification standard Java pour la persistance
- Hibernate — l'implémentation de JPA utilisée par défaut dans Spring Boot
| Symfony / Doctrine | Spring Boot / JPA |
|---|---|
DATABASE_URL dans .env | spring.datasource.url dans application.properties |
doctrine.yaml | propriétés spring.jpa.* dans application.properties |
| MariaDB/MySQL | MySQL (même syntaxe SQL) |
make:migration | Flyway (séance 509) |
php bin/console doctrine:database:create | Créer la BDD manuellement ou avec Flyway |
Configurer la connexion dans application.properties
# === Base de données ===
spring.datasource.url=jdbc:mysql://localhost:3306/monblog
spring.datasource.username=root
spring.datasource.password=
# Driver JDBC (auto-détecté, mais on peut le préciser)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# === Hibernate / JPA ===
# validate : vérifie que le schéma correspond aux entités (recommandé avec Flyway)
# update : met à jour le schéma automatiquement (dangereux en production)
# create : recrée le schéma à chaque démarrage (perd les données)
# none : ne fait rien
spring.jpa.hibernate.ddl-auto=validate
# Afficher les requêtes SQL générées dans la console (utile pour déboguer)
spring.jpa.show-sql=true
# Formater le SQL affiché
spring.jpa.properties.hibernate.format_sql=true
Quand vous utilisez Flyway pour gérer les migrations (séance 509), réglez toujours ddl-auto=validate. Hibernate vérifiera que le schéma de la base correspond aux entités, sans le modifier. Laissez Flyway gérer les changements de schéma.
N'utilisez jamais ddl-auto=create en production — cela efface toutes les données au démarrage.
Sécuriser les secrets avec un profil local
Le fichier application.properties est commité dans Git. Il ne doit pas contenir de mot de passe. La solution : un fichier application-local.properties non commité.
application.properties (commité, sans secrets) :
spring.application.name=MonBlog
server.port=8080
# Indique à Spring Boot de charger aussi application-local.properties
spring.profiles.active=local
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=true
application-local.properties (non commité, avec secrets) :
# === Secrets locaux — NE PAS COMMITTER ===
spring.datasource.url=jdbc:mysql://localhost:3306/monblog
spring.datasource.username=root
spring.datasource.password=monmotdepasse
.gitignore :
application-local.properties
Créer la base de données MySQL
Avant de lancer Spring Boot, créez la base de données :
-- Dans le terminal MySQL
CREATE DATABASE monblog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ou depuis MySQL Workbench / DBeaver.