2025-09-09 10:59:55 +02:00
2025-07-27 13:05:39 +02:00
2025-07-27 13:05:39 +02:00
2025-09-08 15:42:59 +02:00
2025-06-30 10:32:05 +02:00
2025-09-08 15:42:59 +02:00

Spring Batch Job Management System

Sistema completo di gestione e monitoraggio job Spring Batch con interfacce web e desktop, controllo del ciclo di vita dei job e gestione sicura dei processi.

🚀 Funzionalità Principali

  • Esecuzione Job Controllata: Avvio job specifici con parametri personalizzati
  • Monitoraggio Real-time: Interfacce web e desktop per il monitoraggio dei job
  • Gestione Processi: Avvio, stop e kill sicuri dei processi batch
  • Status Tracking: Monitoraggio completo dello stato dei job attivi
  • Shutdown Sicuro: Terminazione controllata solo quando non ci sono job attivi

📊 Database

  • C6StampeCentralizzate: Database principale con metadata Spring Batch
  • SEIReport: Database secondario per reporting
  • ConsulenzaUnica: Database per elaborazioni consulenza

Requisiti

  • Java 21
  • Maven
  • SQL Server

Struttura del Progetto

src/main/java/com/fideuram/bulk/
├── BatchApplication.java          # Classe principale dell'applicazione
└── config/
    ├── BatchDispachConfig.java   # Configurazione del batch job
    └── DatabaseConfig.java       # Configurazione dei datasource

Configurazione

Il progetto utilizza:

  • Spring Boot 3.1.13
  • Spring Batch 5.1.3
  • SQL Server per il job repository

Branch

  • master: versione stabile per Java 8
  • jdk11: versione migrata a Java 11 con Spring Boot 2.7.x

Database

La configurazione del database utilizza Hikari connection pool e richiede:

  1. Database principale (C6StampeCentralizzate):

    jdbc:sqlserver://localhost;databaseName=C6StampeCentralizzate
    User: F701264
    Password: centrsei
    
  2. Database reporting (SEIReport):

    jdbc:sqlserver://localhost;databaseName=SEIReport
    User: F701264
    Password: centrsei
    

Spring Batch Schema

Il progetto include uno schema SQL Server personalizzato (schema-sqlserver.sql) che crea:

  • Tabelle: BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, BATCH_JOB_EXECUTION_PARAMS, etc.
  • Sequenze necessarie per il job repository

🛠️ Comandi Build.bat

Il sistema include uno script build.bat completo per la gestione del ciclo di vita dei job:

Compilazione e Gestione Processi

build.bat compile              # Compila il progetto
build.bat tws                  # Avvia il processo TWS (se non già attivo)
build.bat stop                 # Shutdown sicuro (solo se nessun job attivo)

Esecuzione Job

build.bat run [jobName]        # Esegue job specifico (es: preTrimestraleJob)
build.bat debug               # Esecuzione in modalità debug

Monitoraggio

build.bat status              # Mostra status job Spring Batch attivi
build.bat monitor-gui         # Avvia monitor grafico Swing

Gestione Job Avanzata

build.bat kill [jobId]        # Termina forzatamente un job specifico

Esempi di Utilizzo

# Workflow tipico
build.bat compile
build.bat tws
build.bat run aspettaJob
build.bat status
build.bat monitor-gui
build.bat stop

📋 Job Disponibili

Job di Produzione

  • preTrimestraleJob: Elaborazione dati trimestrali con steps:

    • notifyStartStep: Notifica inizio elaborazione
    • truncateStep: Pulizia tabelle temporanee
    • avvioTrimestraleStep: Avvio elaborazione principale
    • congelamentoContrattiStep: Congelamento contratti
    • notifyEndStep: Notifica fine elaborazione
  • appoContrattiJob: Gestione appuntamenti contratti

    • Include ricodificaMassivaJob per ricodifica massiva
  • dispachJob: Job principale di dispatching

    • ciaoStep: Inserimento log nel database C6StampeCentralizzate
    • seiReportStep: Interazione con database SEIReport

Job di Test

  • aspettaJob: Job di test che attende 1 minuto con logging periodico
  • helloWorldJob: Job di esempio per test di base

Dettagli Implementazione

  • Il job (dispachJob) contiene due step in sequenza:
    1. ciaoStep: inserisce una riga su LogN nel database C6StampeCentralizzate
    2. seiReportStep: interagisce con il database SEIReport

Gestione delle Dipendenze

L'applicazione utilizza l'iniezione delle dipendenze di Spring per gestire i JdbcTemplate:

@Configuration
public class DataSourceConfig {
    @Primary
    @Bean(name = "trimestraleJdbcTemplate")
    public JdbcTemplate trimestraleJdbcTemplate(DataSource trimestraleDataSource) {
        return new JdbcTemplate(trimestraleDataSource);
    }
}

@Configuration
public class BatchDispachConfig {
    public BatchDispachConfig(JdbcTemplate trimestraleJdbcTemplate) {
        this.trimestraleJdbcTemplate = trimestraleJdbcTemplate;
    }
}

Spring risolve le dipendenze in questo modo:

  1. Cerca un bean di tipo JdbcTemplate
  2. Se trova più bean dello stesso tipo:
    • Controlla se uno è marcato come @Primary
    • Controlla se il nome del bean corrisponde al nome del parametro
    • Usa @Qualifier se specificato

Flusso dell'Applicazione

  1. L'applicazione parte da BatchApplication (classe principale con @SpringBootApplication)

  2. Spring Boot esegue la scansione del package com.fideuram.bulk e trova:

    • BatchDispachConfig (annotata con @Configuration)
    • Crea automaticamente i bean definiti in BatchDispachConfig
  3. BatchApplication utilizza il job attraverso:

    @Autowired
    private Job dispachJob;
    

Comandi di Esecuzione

Il progetto include uno script build.bat che semplifica la compilazione e l'esecuzione:

Compilazione

.\build.bat compile

Esecuzione Job Batch

# Esecuzione senza job automatici (configurazione predefinita)
.\build.bat run

# Esecuzione con job specifico in modalità debug
.\build.bat debug

Monitor Grafici

# Monitor GUI (Swing Desktop)
.\build.bat monitor-gui

# Monitor Web: avvia l'app e vai su http://localhost:8080
.\build.bat run

Sistema di Monitoraggio

Monitor Web (HTML) - RACCOMANDATO

Avvio:

  1. Esegui .\.build.bat run
  2. Apri il browser su http://localhost:8080

Funzionalità:

  • Interfaccia web moderna con design responsive
  • Tabella dinamica con dettagli completi dei job batch
  • Auto-refresh ON/OFF configurabile
  • Aggiornamento manuale con pulsante dedicato
  • Avvio job batch direttamente dall'interfaccia
  • Gestione errori con messaggi informativi
  • Formattazione automatica di date e stati
  • Colori per gli stati (verde=completato, rosso=fallito, blu=in esecuzione)

Sezione Avvio Job:

  • Pulsanti dinamici per tutti i job disponibili
  • Conferma prima dell'avvio
  • Feedback in tempo reale
  • Aggiornamento automatico dopo l'avvio

Monitor GUI (Swing Desktop)

Avvio:

.\build.bat monitor-gui

Funzionalità:

  • Interfaccia desktop Java Swing
  • Auto-refresh ON/OFF toggle
  • Aggiornamento manuale
  • Tabella con dettagli job

API Endpoints

L'applicazione espone i seguenti endpoint REST:

Monitoraggio Job

GET /actuator/batch/jobs

Restituisce la lista delle esecuzioni job con dettagli completi.

Elenco Job Disponibili

GET /actuator/batch/available-jobs

Restituisce la lista dei job batch disponibili per l'avvio.

Avvio Job

POST /actuator/batch/launch/{jobName}

Avvia un job batch specifico. Parametri automatici:

  • timestamp: timestamp di avvio
  • launchedBy: "monitor"

Esempio di risposta:

{
  "status": "success",
  "message": "Job 'dispachJob' avviato con successo",
  "executionId": 123,
  "jobStatus": "STARTING"
}

Configurazione Avanzata

Disabilitazione Auto-Start Job

Per impostazione predefinita, i job non si avviano automaticamente:

# In application.properties
spring.batch.job.enabled=false

Configurazione Actuator

Gli endpoint di monitoraggio sono abilitati tramite:

# Endpoint Actuator per il monitoraggio
management.endpoints.web.exposure.include=health,info,batch
management.endpoint.batch.enabled=true
management.endpoints.web.base-path=/actuator

Database Job Repository

L'applicazione utilizza SQL Server per il job repository con tabelle personalizzate:

spring.sql.init.mode=always
spring.sql.init.schema-locations=classpath:schema-sqlserver.sql
spring.batch.jdbc.initialize-schema=never

Job Disponibili

I job batch configurati nell'applicazione:

  1. dispachJob - Job principale di dispatching
  2. preTrimestraleJob - Job per elaborazioni trimestrali
  3. helloWorldJob - Job di esempio per test

Risoluzione Problemi

Job Non Partono Automaticamente

Comportamento Corretto - I job sono configurati per non partire automaticamente.

Monitor GUI Non Si Apre

  • Verifica che l'applicazione Spring Boot sia in esecuzione (.\.build.bat run)
  • Controlla che la porta 8080 non sia occupata
  • Usa il monitor web come alternativa

Errori di Connessione Database

  • Verifica le credenziali in application.properties
  • Controlla che SQL Server sia accessibile
  • Verifica che le tabelle Spring Batch siano create

Job Già in Esecuzione

Se ricevi l'errore "Job già in esecuzione":

  • Attendi il completamento del job corrente
  • Controlla lo stato nella tabella del monitor
  • Verifica i log per eventuali job bloccati

Log e Debug

I log sono configurati per fornire informazioni dettagliate:

logging.level.com.fideuram.bulk=TRACE
logging.level.org.springframework.batch=INFO

Per debug avanzato, usa:

.\build.bat debug
Description
No description provided
Readme 290 KiB
Languages
Java 61.5%
HTML 28.5%
Batchfile 6.8%
TSQL 3.2%