Architecture d'une Application Spring Boot
Client
- Représente l'application frontale (web ou mobile) qui envoie des requêtes HTTP.
API Gateway
- Point d'entrée pour toutes les requêtes des clients. Il redirige les requêtes vers les services appropriés.
Spring Boot Application
- Le cœur de l'application contenant la logique métier, comprenant :
- Controllers : Gèrent les requêtes entrantes et les réponses.
- Services : Contiennent la logique métier et interagissent avec les Repositories .
- Repositories : Gèrent l'accès aux données et les interactions avec la base de données.
- Le cœur de l'application contenant la logique métier, comprenant :
Database
- Solution de stockage persistant pour les données de l'application (ex. : MySQL, PostgreSQL).
Microservices
- Services indépendants offrant des fonctionnalités spécifiques, pouvant être développés et déployés séparément.
Auth Server
- Responsable de l'authentification et de l'autorisation, génère et valide les jetons d'accès.
Cache
- Mécanisme de stockage des données fréquemment consultées en mémoire, améliorant les performances.
Message Broker
- Facilite la communication asynchrone entre les composants ou microservices (ex. : RabbitMQ, Kafka).
Database Queries
- Interactions entre l'application Spring Boot et la base de données pour les opérations CRUD.
Résumé
L'architecture est conçue pour favoriser la séparation des préoccupations, permettant une maintenance, une évolutivité et une flexibilité plus faciles dans le développement et le déploiement d'applications. Chaque composant interagit avec les autres pour offrir une expérience fluide à l'utilisateur final tout en assurant des opérations sécurisées, efficaces et fiables.
Consul:gateway,discovery,config
Spring:Entity et repository
1.Création d'une entité
entité est un objet (table) créer dans une base de données permettant de stocker et gérer des données formatter
Exemple:
- 1Produit(id,nom,marque,prix,qtesSock)
- 2Client(id,nom,prenom,tel,email,password)
L'entité : Produit.java
package com.emsi.models;
import jakarta.persistence.*;
/*Entity :permet de créer la table dans la base de donnnées */
@Entity
/*Table:personnalier le nom de la table sinon la table sera crée avec le meme nom que la classe*/
@Table(name="produits")
public class Produit {
//Id:primary key de la table produits
@Id
//Column:si vous voullez personnaliser le nom d'une colonne
@Column(name="id")
//la Valeur de la colonne id est auto_increment
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
//libelle sera le nom de la colonne qui correspond le nom dans la classe produit
@Column(name="libelle")
private String nom;
//une colonne marque sera crée dans la table produits
private String marque;
//la colonne prix
private float prix;
//la colonne qteStock
private int qteStock;
//les constructeurs ,setter ,getter Sont obligatoires
public Produit() {}
public Produit(int id, String nom, String marque, float prix, int qteStock) {
super();
this.id = id;
this.nom = nom;
this.marque = marque;
this.prix = prix;
this.qteStock = qteStock;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getMarque() {
return marque;
}
public void setMarque(String marque) {
this.marque = marque;
}
public float getPrix() {
return prix;
}
public void setPrix(float prix) {
this.prix = prix;
}
public int getQteStock() {
return qteStock;
}
public void setQteStock(int qteStock) {
this.qteStock = qteStock;
}
}
1.Création d'un Repository
Une interface de L'API Java Persistence (JPA) permettant de conserver des objets Java dans des bases de données relationnelles . Le JPA se compose de deux parties : un sous-système de mappage pour mapper des classes sur des tables relationnelles ainsi qu'une API EntityManager pour accéder aux objets, définir et exécuter des requêtes
Le Repository :ProduitRepository.java
package com.emsi.repositories;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.emsi.models.Produit;
//Repository:création d'un repository le jpa va cherher les interfaces qui ont
//cette annoation afin de générer les méthodes de transaction à la base de données
@Repository
public interface ProduitRepository extends CrudRepository {
/* l'entité à gérer
Integer :le type de la clé primaire id int ;>
les méthodes générique:
save(produit)
findById(id)
findAll()
finByNom(nom)
findByMarque(marque)
findByPrixAndMarque(prix,marque)
findByPrixOrMarque(prix,marque)
....
deleteById(id)
deleteAll()
...
*/
}