{"id":23488642,"url":"https://github.com/erwanlt/springboot-demo","last_synced_at":"2025-09-11T02:10:59.527Z","repository":{"id":260260943,"uuid":"880796802","full_name":"ErwanLT/springboot-demo","owner":"ErwanLT","description":"Demo project for spring-boot possibility","archived":false,"fork":false,"pushed_at":"2025-09-04T06:48:23.000Z","size":8539,"stargazers_count":2,"open_issues_count":5,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-04T08:52:12.849Z","etag":null,"topics":["basic-authentication","chaos-monkey","drools","easyrules","flyway","graphql-java","hateoas","jwt-authentication","liquibase","mapstruct","mapstruct-mapper","monitoring","open-api-codegen","prometheus","rbac-authorization","rulebook","spring-batch","spring-boot-admin","spring-security","springboot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ErwanLT.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-10-30T11:29:28.000Z","updated_at":"2025-09-04T06:48:26.000Z","dependencies_parsed_at":"2025-02-11T13:21:45.441Z","dependency_job_id":"2be73d27-1ce5-41a3-b287-dd96808f9047","html_url":"https://github.com/ErwanLT/springboot-demo","commit_stats":null,"previous_names":["erwanlt/springboot-demo"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/ErwanLT/springboot-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErwanLT%2Fspringboot-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErwanLT%2Fspringboot-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErwanLT%2Fspringboot-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErwanLT%2Fspringboot-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ErwanLT","download_url":"https://codeload.github.com/ErwanLT/springboot-demo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErwanLT%2Fspringboot-demo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274564479,"owners_count":25308592,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-11T02:00:13.660Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["basic-authentication","chaos-monkey","drools","easyrules","flyway","graphql-java","hateoas","jwt-authentication","liquibase","mapstruct","mapstruct-mapper","monitoring","open-api-codegen","prometheus","rbac-authorization","rulebook","spring-batch","spring-boot-admin","spring-security","springboot"],"created_at":"2024-12-24T23:13:33.647Z","updated_at":"2025-09-11T02:10:59.520Z","avatar_url":"https://github.com/ErwanLT.png","language":"Java","readme":"[![Java CI with Maven](https://github.com/ErwanLT/springboot-demo/actions/workflows/maven.yml/badge.svg)](https://github.com/ErwanLT/springboot-demo/actions/workflows/maven.yml) \n[![Java](https://img.shields.io/badge/Java-21-blue.svg?logo=java)](https://www.java.com) \n[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.5.5-green.svg?logo=springboot)](https://spring.io/projects/spring-boot) \n[![OpenAPI](https://img.shields.io/badge/OpenAPI-2.8.8-blue.svg?logo=openapiinitiative)](https://springdoc.org/) \n[![Vaadin](https://img.shields.io/badge/Vaadin-24.8.0-lightblue.svg?logo=vaadin)](https://vaadin.com)\n\n# Springboot Démo\nProjet de démonstration des fonctionnalités et des intégrations possibles avec le framework Spring Boot.\n\n## [Programmation Orientée Aspect (AOP)](core-concept/aspect-tutorial)\nTutoriel sur la **Programmation Orientée Aspect** avec Spring Boot. Apprenez à séparer les préoccupations transversales (comme la journalisation ou la sécurité) de votre logique métier pour un code plus propre et modulaire.\n\n## [Audit](core-concept/audit-tutorial)\nTutoriel sur la mise en place de l'audit pour tracer les modifications de vos données.\n\n## [Customisation bannière](core-concept/banner-tutorial)\nDécouvrez comment customiser la bannière affichée au démarrage de votre application Spring Boot pour y ajouter votre touche personnelle ou des informations utiles.\n[article](https://www.sfeir.dev/back/comment-avoir-une-banniere-spring-personnalisee/)\n\n## [Système de gestion de règles métier (BRMS)](integration/brms-tutorial)\nExplorez différents moteurs de règles pour externaliser et gérer dynamiquement votre logique métier.\n### [Drools](integration/brms-tutorial/drools-tutorial)\nIntégrez **Drools**, un moteur de règles robuste, pour gérer des règles métier complexes de manière déclarative.\n### [Easy Rules](integration/brms-tutorial/easyrules-tutorial)\nUtilisez **Easy Rules**, une bibliothèque légère, pour créer des règles métier simples et faciles à maintenir.\n### [RuleBook](integration/brms-tutorial/rulebook-tutorial)\nDécouvrez **RuleBook** et son DSL intuitif pour construire des règles métier lisibles et chaînées en Java.\n\n## [Limitation de Débit (Rate Limiting) avec Bucket4j](web-layer/bucket4j-tutorial)\nTutoriel sur la mise en place de la **limitation de débit (rate limiting)** pour vos API en utilisant la bibliothèque Bucket4j, afin de protéger vos services contre les surcharges.\n### [Avec un filtre (Filter)](web-layer/bucket4j-tutorial/filter-tutorial)\nApproche robuste utilisant un **Filtre de Servlet** pour appliquer des règles de limitation globales (par exemple, par adresse IP) avant que la requête n'atteigne le contrôleur.\n### [Avec l'AOP](web-layer/bucket4j-tutorial/aop-tutorial)\nMéthode déclarative et propre utilisant la **Programmation Orientée Aspect** pour protéger des méthodes spécifiques avec une simple annotation, sans modifier le code métier.\n### [Dans le contrôleur (Controller)](web-layer/bucket4j-tutorial/controller-tutorial)\nApproche directe où la logique de limitation est appelée explicitement depuis le **contrôleur**, idéale pour des règles simples et spécifiques à un endpoint.\n\n## [Cache](database-access/cache-tutorial)\nTutoriel sur la mise en place d'un système de cache pour améliorer les performances de vos applications.\n\n## [Outils pour les Développeurs (Developer Tools)](developer-tools)\nCollection de tutoriels axés sur des outils et des techniques qui améliorent la productivité et la qualité du code.\n### [Génération de Code](developer-tools/code-generation-tutorial)\nExplore différentes techniques pour automatiser les tâches répétitives, notamment la génération de clients d'API (OpenAPI) et de mappers (MapStruct).\n### [Spring Modulith](developer-tools/modulith-tutorial)\nDémontre comment structurer une application en \"modulithe\" avec des frontières de modules claires et vérifiables.\n\n## [Database versioning](database-access/database-versioning-tutorial)\nGérez les évolutions de votre schéma de base de données de manière rigoureuse et automatisée.\n[article](https://www.sfeir.dev/back/migration-versioning-de-base-de-donnees-dans-une-application-spring-boot/)\n### [Flyway](database-access/database-versioning-tutorial/flyway-tutorial)\nUtilisez **Flyway** pour versionner votre base de données avec des migrations basées sur des scripts SQL.\n### [Liquibase](database-access/database-versioning-tutorial/liquibase-tutorial)\nDécouvrez **Liquibase**, une alternative puissante pour le versioning de base de données avec des changements suivis via des fichiers XML, YAML ou SQL.\n\n## [Elasticsearch](database-access/elasticsearch-tutorial)\nTutoriel sur l'intégration d'**Elasticsearch** dans une application Spring Boot en utilisant Spring Data Elasticsearch pour l'indexation, la recherche plein texte et l'analyse de données.\n\n## [GraphQL](web-layer/graphql-tutorial)\nTutoriel complet sur l'intégration de **GraphQL** pour créer des API flexibles et performantes.\n- **Partie 1 : Mise en place** : Initialisez GraphQL dans votre projet Spring Boot.\n- **Partie 2 : Le schéma** : Définissez la structure de votre API avec le schéma GraphQL.\n- **Partie 3 : Controllers** : Implémentez les résolveurs pour vos requêtes et mutations.\n- **Partie 4 : Tests unitaires** : Apprenez à tester efficacement votre API GraphQL.\n- **Partie 5 : Documentation** : Découvrez des outils pour documenter et tester votre API.\n- **Partie 6 : Gestion des erreurs** : Mettez en place une gestion d'erreurs centralisée et robuste.\n\n## [HATEOAS](web-layer/hateoas-tutorial)\nTutoriel sur comment implémenter **HATEOAS** (Hypermedia as the Engine of Application State) pour enrichir vos API REST avec des liens de navigation, les rendant plus découvrables.\n\n## [Internationalization](web-layer/i18n-tutorial)\nMise en place de l'i18n et du l10n dans un projet springboot.\n\n## [Messaging](integration/messaging-tutorial)\n### [JMS](integration/messaging-tutorial/jms-tutorial)\nTutoriel sur l'intégration de **JMS (Java Message Service)** avec ActiveMQ pour une messagerie asynchrone standard et découplée.\n### [Kafka](integration/messaging-tutorial/kafka-tutorial)\nTutoriel sur l'intégration d'**Apache Kafka** pour construire des systèmes de messagerie asynchrones, distribués et réactifs.\n\n## [Monitoring](operations/monitoring-tutorial)\nSupervisez et monitorez l'état de santé de vos applications.\n### [Prometheus et Grafana](operations/monitoring-tutorial/prometheus-tutorial)\nUtilisez **Prometheus** pour collecter des métriques et **Grafana** pour créer des tableaux de bord de visualisation.\n[article](https://www.sfeir.dev/back/superviser-votre-application-spring-boot/)\n### [Spring Boot Admin](operations/monitoring-tutorial/admin-tutorial)\nDéployez **Spring Boot Admin** pour une interface de monitoring et de gestion dédiée à vos applications Spring.\n\n## [Notification](integration/notification-tutorial)\nTutoriel sur l'envoi de notifications (par exemple, email, SMS) depuis une application Spring Boot.\n\n## [Programmation Concurrente](core-concept/concurrency-tutorial)\nDécouvrez différentes approches pour gérer la concurrence et le parallélisme dans vos applications Spring Boot.\n### [Programmation Asynchrone](core-concept/concurrency-tutorial/async-tutorial)\nTutoriel sur la programmation asynchrone avec Spring Boot pour améliorer la performance et la scalabilité de vos applications.\n### [Programmation Réactive (WebFlux)](core-concept/concurrency-tutorial/reactive-tutorial)\nTutoriel sur la création d'applications web réactives et non-bloquantes avec **Spring WebFlux**.\n\n## [Security](core-concept/security-tutorial)\nApprenez à sécuriser vos applications avec Spring Security.\n### [Basic Auth](core-concept/security-tutorial/basic-auth-tutorial)\nImplémentez l'authentification **Basic Auth**, une méthode simple et standard pour protéger vos endpoints.\n[article](https://www.sfeir.dev/back/securisez-vos-api-avec-spring-security-basic-auth/)\n### [JWT](core-concept/security-tutorial/jwt-tutorial)\nSécurisez vos API de manière stateless avec les **JSON Web Tokens (JWT)**.\n[article](https://www.sfeir.dev/back/securisez-vos-api-avec-spring-security-jwt/)\n### [RBAC](core-concept/security-tutorial/jwt-rbac-tutorial)\nMettez en place un **contrôle d'accès basé sur les rôles (RBAC)** pour gérer finement les permissions de vos utilisateurs.\n[article](https://www.sfeir.dev/back/securisez-vos-api-avec-spring-security-acces-par-role/)\n### [LDAP](core-concept/security-tutorial/ldap-tutorial)\nIntégrez une authentification **LDAP** pour déléguer la gestion des utilisateurs à un annuaire d'entreprise.\n\n## [Scheduled Tutorial](operations/scheduled-tutorial)\n### [Quartz tutorial](operations/scheduled-tutorial/quartz-tutorial)\nDémontre comment utiliser le planificateur Quartz pour une planification de jobs robuste et persistante.\n\n### [Spring Batch](operations/scheduled-tutorial/spring-batch-tutorial)\nImplémentez **Spring Batch** pour créer des traitements par lots (batch) robustes et performants pour des tâches comme l'import/export de données ou des traitements périodiques.\n[article](https://www.sfeir.dev/back/planifier-des-taches-avec-spring-batch/)\n\n## [Templating](web-layer/templating-tutorial)\n### [Jasper](web-layer/templating-tutorial/jasper-tutorial)\nTutoriel sur la génération de documents, comme des rapports PDF, en utilisant la bibliothèque **JasperReports**.\n### [Thymeleaf](web-layer/templating-tutorial/thymeleaf-tutorial)\nUtilisez **Thymeleaf** comme moteur de templates pour construire des applications web côté serveur.\n\n## [Testing tutorial](operations/testing-tutorial)\nDécouvrez un éventail d'outils et de techniques pour tester vos applications.\n### [ArchUnit](operations/testing-tutorial/archunit-tutorial)\nUtilisez **ArchUnit** pour écrire des tests qui valident et maintiennent les contraintes architecturales de votre code (ex: \"les services ne doivent pas accéder directement aux contrôleurs\").\n### [Chaos Monkey](operations/testing-tutorial/chaos-monkey-tutorial)\nIntroduisez du chaos dans votre application avec **Chaos Monkey** pour tester sa résilience en simulant des pannes et des latences de manière contrôlée.\n[article](https://www.sfeir.dev/back/introduisez-du-chaos-dans-votre-application-spring-boot/)\n### [Gatling](operations/testing-tutorial/gatling-tutorial)\nRéalisez des **tests de performance** et de charge sur votre application avec Gatling pour identifier les goulots d'étranglement.\n### [Parameterized tests](operations/testing-tutorial/parametrize-test-tutorial)\nÉcrivez des **tests paramétrés** avec JUnit 5 pour exécuter le même test avec différents jeux de données, rendant vos tests plus concis et efficaces.\n\n## [Vaadin](web-layer/vaadin-tutorial)\nTutoriel sur la création d'applications web riches et interactives entièrement en Java, sans écrire de HTML ou de JavaScript, en utilisant le framework **Vaadin** avec Spring Boot.\n### [Application CRUD](web-layer/vaadin-tutorial/crud-tutorial)\nUn exemple d'application **CRUD (Create, Read, Update, Delete)** complète pour gérer des produits.\n### [Pokédex](web-layer/vaadin-tutorial/pokedex)\nUne application **Pokédex** plus riche pour démontrer la navigation, les vues dynamiques et le data binding.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferwanlt%2Fspringboot-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferwanlt%2Fspringboot-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferwanlt%2Fspringboot-demo/lists"}