Skip to content

A daily batch process to archive users who have been inactive for more than 90 days, using a Spring and Kubernetes.

Notifications You must be signed in to change notification settings

elfn-spring/inactive-user-archiver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🗃️ inactive-user-archiver

🧰 Application Spring Boot + Spring Batch pour l'archivage automatique des utilisateurs inactifs

❗ Problème à résoudre :

"🚫 Éviter l’exécution concurrente d’un batch Spring 🌱 embarqué dans un ReplicaSet de plusieurs pods 📦 dans un cluster Kubernetes ☸️"

🔍:

Ce système exécute un traitement batch quotidien pour détecter et archiver les utilisateurs inactifs depuis plus de 90 jours, à l’aide d’un CronJob Kubernetes. C'est l'application elle-même qui décide quand exécuter le batch, mais Kubernetes qui :

  1. Planifie l'exécution à intervalles réguliers (schedule)
  2. Crée un pod éphémère (temporaire) qui :
    • Lance l’application Spring Boot
    • Exécute le batch (via @PostConstruct ou logique d’init)
    • Termine (le pod est détruit)

🧠 Avantages de cette approche :

  • Aucun risque de concurrence si tu as plusieurs pods ailleurs
  • Pas besoin de gérer une logique de planification avec @Scheduled ou des threads
  • Kubernetes gère tout : planification, isolation, redémarrage si échec, etc.
  • Très propre pour les batchs ponctuels ou planifiés

🧾 Fonctionnalités principales

  • 📆 Planification automatique via CronJob Kubernetes
  • 🧼 Archivage des utilisateurs dans une table dédiée archived_users
  • 🗑️ Suppression des utilisateurs archivés de la table users
  • ⚙️ Spring Batch avec JdbcCursorItemReader et CompositeItemWriter
  • 🐳 Déployable sous forme de pod batch éphémère

🛠️ Stack technique

Composant Description
Spring Boot Application Java
Spring Batch Orchestration du traitement batch
PostgreSQL / H2 Base de données relationnelle
Kubernetes Orchestration des pods/applications
CronJob K8s Déclencheur automatique quotidien, avec Minikube
Docker Conteneurisation de l’application batch

📂 Structure du projet

Voici l’organisation des fichiers du projet inactive-user-archiver :

image image


🛢️ Structure de la base de données

image


📊 Diagramme de flux

flowchart TD
    subgraph Kubernetes_Cluster
        K8sCronJob[Kubernetes CronJob Planification : 1 fois par jour]
        K8sCronJob --> PodBatch[📦 Pod Batch éphémère Résilience : restartPolicy=OnFailure]

        Pod1[🟦 Pod App 1]
        Pod2[🟦 Pod App 2]
        Pod3[🟦 Pod App 3]
    end

    PodBatch --> SpringBoot[🌱 Spring Boot App]
    SpringBoot --> SpringBatch[⚙️ Spring Batch Job]
    SpringBatch --> DB1[(📂 Table users)]
    SpringBatch --> DB2[(📦 Table archived_users)]

    style PodBatch stroke:#f39c12,stroke-width:2px

Loading

About

A daily batch process to archive users who have been inactive for more than 90 days, using a Spring and Kubernetes.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published