Aller au contenu

Nouveau projet Spring Boot DYNORS — procédure et pièges récents

Guide pour démarrer une nouvelle appli (com.dynors.*, PostgreSQL, JWT, inter-app) sans retomber dans les écarts observés sur les projets Dawalale et le workspace local dynors/ (plusieurs clones).


1. Où cloner et où committer

  • Sur le poste de travail, le dossier dynors/ est souvent un répertoire parent avec plusieurs clones côte à côte (core/, dynors-projects/dawalale/, etc.), chacun avec son dépôt Git.
  • Ne pas supposer un unique remote pour tout le dossier parent : les commits et pushes se font dans le dépôt de l’application concernée.
  • Pour une nouvelle app satellite : créer le dépôt GitLab, cloner sous dynors-projects/<nom>/ (ou autre convention d’équipe), travailler dans ce dossier.

Voir aussi : Structure Git & configuration projet.


2. Gradle — BOM et dépendances core

  • gradle.properties : dynors.core.version=<release>éviter -SNAPSHOT pour les builds applicatifs ; consulter Versions et dépendances (core).
  • build.gradle.kts : implementation(platform("com.dynors:dynors-core-bom:…")) puis dynors-commons, dynors-security, dynors-db, etc. sans version explicite sur les modules couverts par le BOM.
  • Package Registry GitLab : token read_api + read_registry — voir le Guide projets clients et l’onboarding équipe.

3. PostgreSQL uniquement — retirer le driver Mongo du classpath

Problème : le module dynors-db peut tirer transitivement org.mongodb. Au démarrage, Spring tente parfois une connexion vers localhost:27017 → erreurs ou logs inutiles alors que l’app n’utilise que JDBC / PostgreSQL.

Correctif Gradle (Kotlin) — exclusions sur dynors-security et dynors-db (les deux : dynors-security ré-importe dynors-db en transitif avec le driver) :

implementation("com.dynors:dynors-security") {
    exclude(group = "org.mongodb")
}
implementation("com.dynors:dynors-db") {
    exclude(group = "org.mongodb")
}

Vérification : ./gradlew dependencies --configuration runtimeClasspath | grep -i mongo ne doit rien afficher.


4. JPA / Liquibase / PostgreSQL — @Lob sur String

Problème : avec Hibernate 6 et PostgreSQL, @Lob sur String peut mapper vers le type oid, alors que Liquibase définit souvent des colonnes TEXT → incohérence schéma / erreurs runtime.

Correctif : pour les longs textes, utiliser par exemple @JdbcTypeCode(SqlTypes.LONGVARCHAR) + @Column(columnDefinition = "text"), aligné sur le changeset Liquibase.

Voir : Base de données multi-tenant.


5. dynors-notify — e-mails / SMS

  • Bibliothèque embarquée dans l’app : pas de serveur NOTIFY central ; chaque déploiement configure dynors.notify.*.
  • Dev : stub: true évite les appels réseau. Recette / prod : stub: false + secrets (Brevo, etc.) via variables d’environnement ou Vault — jamais de clés en clair dans Git.

Configuration dynors-notify


6. dynors-events — bus d’événements

  • Par défaut dynors.events.enabled=false : comportement no-op (aucun broker requis).
  • Pour publier sur un broker : enabled: true + provider (rabbitmq, kafka, redis, in-memory pour tests).

Documentation d’architecture (référence équipe / dépôt dynors) : événements domaine, naming — voir les annexes et le dépôt core si besoin.


7. Inter-app et sécurité

  • Appels entre applications DYNORS : InterAppCallService et gateway SLY, pas d’URL codée en dur dans le métier.
  • JWT et tenant : dynors-security.

Routage inter-app SLY · Sécurité & Auth


8. Doc publiée (ce site) vs dépôt de l’app

  • doc-internal / MkDocs : guides transverses (ce chapitre, notify, logging, multi-tenant, SLY).
  • README, CI/CD et application.yml du dépôt GitLab de l’application : référence pour le déploiement concret de cette appli.

9. Checklist rapide « nouveau backend Spring »

Étape Action
1 Créer / cloner le dépôt de l’app, commits dans ce repo.
2 Importer le BOM dynors-core-bom + accès Package Registry.
3 Exclure org.mongodb sur dynors-security et dynors-db.
4 Configurer application.yml : dynors.*, datasource, dynors.notify.*, dynors.events.* si besoin.
5 Liquibase + entités : attention @Lob / TEXT / oid sur PostgreSQL.
6 Tests : profil test, H2 ou Testcontainers selon le projet.

Dernière mise à jour : 2026-04-13 — synthèse issue des mises en œuvre Dawalale (Mongo, JPA) et des règles d’organisation des dépôts DYNORS.