Connectez votre Springboot à votre BDD postgre, dans deux dockers 🤪

Créer votre BDD postgre

On prend simplement notre fichier docker-compose.yml et on ajoute les lignes suivantes :

postgres:
  image: postgres:17-alpine
  ports:
    - 127.0.0.1:5432:5432
  container_name: truck_bdd
  environment:
    - POSTGRES_USER=truck
    - POSTGRES_PASSWORD=123456
    - POSTGRES_DB=truck

On décortique :

postgres:

Le nom utilisé dans docker compose pour vous aider à identifier la machine dans le fichier.

image: postgres:17-alpine

L’image utilisée, donc une distribution alpine avec un postgres configuré.

  ports:
    - 127.0.0.1:5432:5432

Ceci n’est pas nécessaire, mais va vous permettre de vous connecter à postgre à partir de votre pc. À utiliser avec précaution en prod, bien vérifier que le port n’est pas accessible à n’importe qui. Donc le port 5432 est le port par défaut de postgre, vous pouvez utiliser un autre port à gauche s’il est déjà utilisé par un autre programme (par exemple si vous avez plusieurs BDD).

container_name: truck_bdd

Le nom de votre container pour docker, afin de redémarrer, avoir les logs…

  environment:
    - POSTGRES_USER=truck
    - POSTGRES_PASSWORD=123456
    - POSTGRES_DB=truck

Des variables d’environnements qui vont permettre de configurer un utilisateur, un mot de passe ainsi que le nom de la base de données.
– POSTGRES_USER => nom d’utilisateur
– POSTGRES_PASSWORD => mot de passe de l’utilisateur
– POSTGRES_DB => Le nom de la BDD

Changer la configuration dans springboot

build.gradle

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-security'
	runtimeOnly 'org.postgresql:postgresql'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

On remplace juste la ligne

runtimeOnly 'com.h2database:h2'

par :

runtimeOnly 'org.postgresql:postgresql'

On demande à Springboot d’importer le connecteur postgre plutôt que celui de h2.

application.properties

spring.datasource.url=jdbc:postgresql://truck_bdd:5432/truck
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.username=truck
spring.datasource.password=123456
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=create-drop

En détail :

spring.datasource.url=jdbc:postgresql://truck_bdd:5432/truck

L’url de votre connexion à la BDD avec

  • jdbc => le protocole de connexion standard de java
  • postgresql => le type de bdd
  • truck_bdd => le nom de la machine dans votre docker compose
  • 5432 => le port postgre
  • truck => le nom de la BDD qui doit être le même que dans le docker-compose.yml (POSTGRES_DB)
spring.datasource.driverClassName=org.postgresql.Driver

La classe à utiliser pour la connexion, chaque type de BDD à sa propre classe.

spring.datasource.username=truck

Le nom d’utilisateur qui doit être le même que dans le docker-compose.yml (POSTGRES_USER)

spring.datasource.password=123456

Le mot de passe qui doit être le même que dans le docker-compose.yml (POSTGRES_PASSWORD)

spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect

Le dialect que doit utiliser Springboot afin de discuter avec la BDD, chaque type de BDD à son propre dialect.

spring.jpa.hibernate.ddl-auto=create-drop

Indique que Springboot va créer le schema de la BDD au début de la session et le supprimer à la fin. Vous avez d’autres possibilités comme create qui va le créer, mais pas le supprimer ou update … Chaque besoin à sa solution.

Comment lancer tout ça?

Ouvrir votre terminal préféré, faites un cd vers le projet Springboot. Et lancez :

./gradlew build -x test

Ensuite faites un cd vers le dossier contenant votre docker-compose.yml. Et lancez la commande :

docker compose up -d

Voilà tout est prêt. Ça n’était pas si compliqué. Avez-vous des questions des commentaires? Bien entendu on peut paramétrer plus de choses, mais là avec un minimum de code, on a quelque chose qui fonctionne et même plutôt bien ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.