Année Universitaire : 2023-2024
Applications Web Distribuées
UP_WEB
Atelier-Création de Microservice
Gestion des candidats
Objectifs
Notre objectif est de créer un Microservice qui fournit des exemples d'opérations.
Développement des micro-services
Nous visons à créer un premier microservice de gestion des candidats dans une entreprise.
Soit l’entité suivante représentant un candidat:
Le microservice Gestion candidats va se charger des fonctionnalités suivantes :
- Afficher tous les candidats
- Afficher un candidat par son id ou son nom
- Ajouter/modifier/supprimer un candidat
1. Créez un projet de type Spring boot selon l’IDE choisi, Eclipse ou IntelliJ :
Page 1 sur 10
IntelliJ Eclipse
2. Ajouter les dépendances nécessaires :
IntelliJ Eclipse
Page 2 sur 10
3. Créez le contrôleur REST de notre microservice qui est représenté par une classe
nommée par exemple “CandidatRestAPI”.
4. Créez l'entité "Candidat" :
5. Créez le Repository lié à l’entité Candidat :
public interface CandidatRepository extends JpaRepository<Candidat , Integer> {
Page 3 sur 10
6. Créez une fonction dans la classe CandidateApplication (créée par défaut lors de la
création du projet) qui va permettre d'insérer automatiquement des candidats dans la base
@SpringBootApplication
public class CandidateApplication {
public static void main(String[] args) {
[Link]([Link], args);
}
@Autowired
private CandidatRepository repository;
@Bean
ApplicationRunner init() {
return (args) -> {
// save
[Link](new Candidat("Mariem", "Ch", "ma@[Link]"));
[Link](new Candidat("Sarra", "ab", "sa@[Link]"));
[Link](new Candidat("Mohamed", "ba", "mo@[Link]"));
// fetch
[Link]().forEach([Link]::println);
};
}
}
7. Exécuter la classe CandidateApplication :
IntelliJ Eclipse
Page 4 sur 10
8. Accéder à l’adresse [Link]
Vous pouvez accéder à l’adresse [Link] pour voir les détails de tous les
candidats.
Vous pouvez également faire une recherche de candidats par id : [Link]
9. Pour ajouter par exemple une requête de recherche d’un candidat par son nom, on
modifie ainsi la classe CandidatRepository:
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public interface CandidatRepository extends JpaRepository<Candidat, Integer> {
@Query("select c from Candidat c where [Link] like :name")
public Page<Candidat> candidatByNom(@Param("name") String n, Pageable pageable);
}
Lancez l’URL [Link] pour faire la
recherche d’un candidat par nom
Page 5 sur 10
9. Pour le monitoring de la base de donnés H2, ajoutez la configuration suivante dans le
fichier [Link]:
# H2
[Link]=true
[Link]=/h2
# Datasource
[Link]=Ines
[Link]=
[Link]-class-name=[Link]
[Link]-auto = create
Accédez ensuite à l’URL [Link] pour consulter l’interface de gestion de la base H2.
Ajouter l’URL d’accès au JDBC ./Database/Data/Candidat pour voir et traiter les données de votre
BD h2. Donner votre userName et password :
Page 6 sur 10
10. Nous allons maintenant préparer les services “ajouter”, “modifier” et “supprimer” candidat.
Ajoutez la classe CandidatService qui va se charger d’implémenter ces méthodes:
import [Link];
import [Link];
@Service
public class CandidatService {
@Autowired
private CandidatRepository candidateRepository;
public Candidat addCandidat(Candidat candidate) {
return [Link](candidate);
}
public Candidat updateCandidat(int id, Candidat newCandidat) {
if ([Link](id).isPresent()) {
Candidat existingCandidat = [Link](id).get();
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
return [Link](existingCandidat);
} else
return null;
}
public String deleteCandidat(int id) {
if ([Link](id).isPresent()) {
[Link](id);
return "candidat supprimé";
} else
return "candidat non supprimé";
}
}
Nous préparons par la suite notre API REST. Configurer les requêtes REST dans le controleur REST
en ajoutant les méthodes qui suivent:
@Autowired
private CandidatService candidatService;
@PostMapping(consumes = MediaType.APPLICATION_XML_VALUE)
@ResponseStatus([Link])
public ResponseEntity<Candidat> createCandidat(@RequestBody Candidat candidat) {
return new ResponseEntity<>([Link](candidat), [Link]);
}
@PutMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
Page 7 sur 10
@ResponseStatus([Link])
public ResponseEntity<Candidat> updateCandidat(@PathVariable(value = "id") int id,
@RequestBody Candidat candidat){
return new ResponseEntity<>([Link](id, candidat),
[Link]);
}
@DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus([Link])
public ResponseEntity<String> deleteCandidat(@PathVariable(value = "id") int id){
return new ResponseEntity<>([Link](id), [Link]);
}
11. Afin de lancer une deuxième instance du même service sur un port différent :
IDE IntelliJ :
a. accédez à Edit Configuration :
b. Cliquez sur « Add New Configuration » :
c. Choisissez « Spring Boot » puis ajouter la configuration suivante en choisissant la
classe CandidateApplication comme « Main class ».
d. Cliquez sur « Modify options » --> « Add VM options » :
Page 8 sur 10
e. Fixez le port de la nouvelle instance, du même service, en ajoutant l’arguement :
-[Link]=8082 :
IDE Eclipse :
faites le Run (run->edit configuration->duplicate configuration) en ajoutant
l’argument --[Link]=8082 dans la partie Arguments/Program Arguments.
Page 9 sur 10
12. Exécutez la nouvelle instance et y accéder à travers l’URL « [Link]
** Ne pas arrêter l’ancienne instance du service s'exécutant sur le port 8080.
13. Travail à faire :
Implémentez un deuxième microservice (dans un nouveau projet spring boot) qui se charge de
la gestion des jobs et utilisant MySQL comme Base de données. L’entité Job est représentée
comme suit:
Ce deuxième microservice prendra en charge les fonctionnalités suivantes:
- Afficher tous les jobs
- Afficher un job par son id ou son nom
- La modification de l’état de poste :
o Etat= oui (si poste disponible)
o Etat= non (si poste est occupé).
Page 10 sur 10