java-springboot

Par github · awesome-copilot

Obtenez les meilleures pratiques pour développer des applications avec Spring Boot.

npx skills add https://github.com/github/awesome-copilot --skill java-springboot

Bonnes pratiques Spring Boot

Votre objectif est d'écrire des applications Spring Boot de haute qualité en suivant les bonnes pratiques établies.

Configuration du projet et structure

  • Outil de build : Utilisez Maven (pom.xml) ou Gradle (build.gradle) pour la gestion des dépendances.
  • Starters : Utilisez les starters Spring Boot (par exemple, spring-boot-starter-web, spring-boot-starter-data-jpa) pour simplifier la gestion des dépendances.
  • Structure des packages : Organisez le code par feature/domaine (par exemple, com.example.app.order, com.example.app.user) plutôt que par couche (par exemple, com.example.app.controller, com.example.app.service).

Injection de dépendances et composants

  • Injection par constructeur : Utilisez toujours l'injection basée sur le constructeur pour les dépendances requises. Cela rend les composants plus faciles à tester et les dépendances explicites.
  • Immuabilité : Déclarez les champs de dépendance comme private final.
  • Stéréotypes de composants : Utilisez les annotations @Component, @Service, @Repository et @Controller/@RestController de manière appropriée pour définir les beans.

Configuration

  • Configuration externalisée : Utilisez application.yml (ou application.properties) pour la configuration. YAML est souvent préféré pour sa lisibilité et sa structure hiérarchique.
  • Propriétés type-safe : Utilisez @ConfigurationProperties pour lier la configuration à des objets Java fortement typés.
  • Profils : Utilisez les profils Spring (application-dev.yml, application-prod.yml) pour gérer les configurations spécifiques à l'environnement.
  • Gestion des secrets : Ne codez pas les secrets en dur. Utilisez des variables d'environnement ou un outil dédié de gestion des secrets comme HashiCorp Vault ou AWS Secrets Manager.

Couche web (Contrôleurs)

  • APIs RESTful : Concevez des endpoints RESTful clairs et cohérents.
  • DTOs (Data Transfer Objects) : Utilisez les DTOs pour exposer et consommer les données au niveau de la couche API. N'exposez pas directement les entités JPA au client.
  • Validation : Utilisez la validation Java Bean (JSR 380) avec les annotations (@Valid, @NotNull, @Size) sur les DTOs pour valider les payloads de requête.
  • Gestion d'erreurs : Implémentez un gestionnaire d'exceptions global en utilisant @ControllerAdvice et @ExceptionHandler pour fournir des réponses d'erreur cohérentes.

Couche service

  • Logique métier : Encapsulez toute la logique métier au sein des classes @Service.
  • Absence d'état : Les services doivent être sans état.
  • Gestion des transactions : Utilisez @Transactional sur les méthodes de service pour gérer les transactions de base de données de manière déclarative. Appliquez-le au niveau de granularité le plus fin nécessaire.

Couche données (Repositories)

  • Spring Data JPA : Utilisez les repositories Spring Data JPA en étendant JpaRepository ou CrudRepository pour les opérations standard sur la base de données.
  • Requêtes personnalisées : Pour les requêtes complexes, utilisez @Query ou l'API JPA Criteria.
  • Projections : Utilisez les projections de DTO pour récupérer uniquement les données nécessaires de la base de données.

Journalisation

  • SLF4J : Utilisez l'API SLF4J pour la journalisation.
  • Déclaration du logger : private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
  • Journalisation paramétrée : Utilisez des messages paramétrés (logger.info("Processing user {}...", userId);) au lieu de la concaténation de chaînes pour améliorer les performances.

Tests

  • Tests unitaires : Écrivez des tests unitaires pour les services et les composants en utilisant JUnit 5 et un framework de mocking comme Mockito.
  • Tests d'intégration : Utilisez @SpringBootTest pour les tests d'intégration qui chargent le contexte de l'application Spring.
  • Test slices : Utilisez les annotations test slice comme @WebMvcTest (pour les contrôleurs) ou @DataJpaTest (pour les repositories) pour tester des parties spécifiques de l'application de manière isolée.
  • Testcontainers : Envisagez d'utiliser Testcontainers pour les tests d'intégration fiables avec des bases de données réelles, des message brokers, etc.

Sécurité

  • Spring Security : Utilisez Spring Security pour l'authentification et l'autorisation.
  • Encodage des mots de passe : Encodez toujours les mots de passe en utilisant un algorithme de hachage fort comme BCrypt.
  • Sanitisation des entrées : Prévenez les injections SQL en utilisant Spring Data JPA ou des requêtes paramétrées. Prévenez les attaques Cross-Site Scripting (XSS) en encodant correctement la sortie.

Skills similaires